Przejdź do głównej treści

Symulowanie natury

Obejrzyj ten film Olivii Lanes na temat symulowania natury za pomocą komputerów kwantowych lub otwórz wideo w osobnym oknie na YouTube.

Ta lekcja korzysta z treści następującego samouczka:

Samouczek dotyczący łagodzenia błędów w skali użyteczności z probabilistycznym wzmacnianiem błędów

Wprowadzenie

Jednym z najbardziej fascynujących zastosowań komputerów kwantowych jest ich zdolność do symulowania zjawisk naturalnych. W tej lekcji przyjrzymy się, w jaki sposób komputery kwantowe są wykorzystywane do rozwiązywania problemów dynamiki kwantowej — konkretnie: jak pomagają nam zrozumieć ewolucję czasową układu kwantowego.

Na początku spojrzymy z szerszej perspektywy na ogólne kroki wykonywane podczas takich symulacji. Następnie przeanalizujemy konkretny przykład: eksperyment zaprezentowany przez IBM w 2023 roku, który pokazał koncepcję użyteczności kwantowej. Eksperyment ten stanowi doskonałe studium przypadku pozwalające zrozumieć praktyczne kroki i implikacje symulowania dynamiki kwantowej na rzeczywistym sprzęcie kwantowym. Na koniec będziesz mieć wyraźniejszy obraz tego, jak badacze podchodzą do tych wyzwań i dlaczego symulacja kwantowa wzbudza tak duże nadzieje na pogłębienie naszego rozumienia świata naturalnego.

Richard Feynman wygłosił niezwykle wpływowy wykład na Caltech w 1959 roku. Nosił on słynny tytuł „There's Plenty of Room at the Bottom" — żartobliwe nawiązanie do ogromnych, niezbadanych możliwości kryjących się w skali mikroskopowej. Feynman przekonywał, że większość fizyki na poziomie atomowym i subatomowym pozostaje jeszcze do odkrycia.

Znaczenie tego wykładu wzrosło w latach osiemdziesiątych XX wieku wraz z postępem technologicznym. W tym okresie Feynman powrócił do tych idei podczas kolejnego ważnego wykładu na Caltech, prezentując artykuł zatytułowany „Simulating Nature with Computers". Postawił tam odważne pytanie: czy komputery mogłyby wykonywać dokładne symulacje odtwarzające zachowanie natury na poziomie kwantowym? Feynman zasugerował, że zamiast polegać na przybliżonych modelach procesów atomowych, moglibyśmy używać komputerów, które same działają zgodnie z prawami mechaniki kwantowej — nie po to, by jedynie modelować naturę, lecz by ją naśladować.

Właśnie ten rodzaj symulacji fizycznej zbadamy w tej lekcji.

Przypomnij sobie oś czasu wprowadzoną w poprzednim odcinku. Na jednym końcu spektrum widoczne są problemy, które są łatwe do rozwiązania i nie wymagają zwiększonej prędkości, jaką może zapewnić obliczanie kwantowe.

Diagram przedstawiający rozkład możliwych problemów od łatwych do trudnych, od tych niewymagających komputera kwantowego do tych wymagających w pełni odpornego na błędy, ze wskazaniem, że skupiamy się na problemach pośrodku.

Na przeciwległym końcu znajdują się niezwykle trudne problemy wymagające w pełni odpornych na błędy maszyn kwantowych — technologii, która nie jest jeszcze dostępna. Na szczęście uważa się, że wiele problemów symulacyjnych leży gdzieś w połowie tej osi czasu, w zasięgu dzisiejszych komputerów kwantowych, które można już efektywnie wykorzystać. Jest wiele powodów, by być podekscytowanym i zaintrygowanym tą perspektywą, ponieważ symulowanie natury stanowi podstawę szerokiego zakresu obiecujących zastosowań.

Poniższe informacje opisują ogólny przepływ pracy przy symulacjach natury, a następnie konkretny przykład tego przepływu służący do odtworzenia wyników z dobrze znanego artykułu.

Ogólny przepływ pracy

Zanim będzie można zastosować obliczenia kwantowe w tych ekscytujących dziedzinach, warto najpierw zrozumieć podstawowe kroki typowego przepływu pracy przy symulacjach:

  1. Identyfikacja Hamiltonianu układu
  2. Kodowanie Hamiltonianu
  3. Przygotowanie stanu
  4. Ewolucja czasowa stanu
  5. Optymalizacja Circuit
  6. Wykonanie Circuit
  7. Post-processing

Proces zaczyna się od zidentyfikowania interesującego układu kwantowego. Pomaga to określić Hamiltonian rządzący jego ewolucją czasową, a także sensowny opis jego początkowych właściwości, czyli jego stan. Następnie musisz wybrać odpowiednią metodę implementacji ewolucji czasowej tego stanu. Zauważ, że pierwsze cztery kroki tego przepływu pracy są częścią kroku Mapowania w frameworku wzorców Qiskit.

Po skonfigurowaniu Circuit ewolucji czasowej kolejne etapy obejmują przeprowadzenie właściwego eksperymentu. Zazwyczaj obejmuje to optymalizację Circuit kwantowego implementującego algorytm ewolucji czasowej, uruchomienie Circuit na sprzęcie kwantowym oraz post-processing wyników. Odpowiadają one ostatnim trzem krokom frameworku wzorców Qiskit.

Następnie omówimy, co oznaczają te kroki, zanim przejdziemy do kodowania.

1. Identyfikacja Hamiltonianu układu

Pierwszym niezbędnym krokiem w przeprowadzeniu eksperymentu symulacyjnego jest zidentyfikowanie Hamiltonianu opisującego układ. W wielu przypadkach Hamiltonian jest dobrze znany. Często jednak konstruujemy go, sumując wkłady energetyczne z mniejszych części układu. Typowo wyraża się to jako sumę składników:

H=iNHiH=\sum_i^N {H_i}

gdzie każdy składnik HiH_i działa na jeden z NN lokalnych podukładów (np. pojedynczą cząstkę lub małą grupę cząstek) całkowitego Hamiltonianu HH. W przypadku nierozróżnialnych cząstek elementarnych ważne jest ustalenie, czy układ zawiera fermiony czy bozony — fermiony podlegają zasadzie wykluczenia Pauliego, co oznacza, że żadne dwa identyczne fermiony nie mogą zajmować tych samych stanów kwantowych, jak np. elektrony. W przeciwieństwie do fermionów, wiele bozonów może znajdować się w tym samym stanie kwantowym, a ta różnica wpływa na statystykę układu i sposób jego modelowania.

W praktyce badaczy często interesują układy fizyczne, w których elementy są traktowane jako dobrze rozdzielone lub oznaczone, a tym samym rozróżnialne — jak spiny na siatce.

Siatka ze spinami oraz cząsteczka połączona elektronami będącymi fermionami.

Ten układ składa się z magnetycznych spinów dipolarnych rozmieszczonych na siatce, traktowanych jako rozróżnialne cząstki poprzez numerowanie ich pozycji. Układ ten opisuje Model Isinga z polem poprzecznym, a jego Hamiltonian jest skonstruowany jako suma dwóch części:

H=iNHi=J<i,j>ZiZj+hi=0NXiH = \sum_i^N {H_i} = J \sum_{<i,j>}Z_iZ_j + h\sum_{i=0}^N X_i

Gdzie pierwszy składnik reprezentuje energię oddziaływania między sąsiednimi spinami. Tutaj <i,j><i,j> oznacza, że sumujemy po wszystkich parach spinów bezpośrednio połączonych na siatce, ZiZ_i i ZjZ_j to macierze Pauliego-Z, które reprezentują stan spinów w miejscach ii i jj, a JJ to stała sprzężenia określająca siłę tego oddziaływania. Drugi składnik reprezentuje wpływ zewnętrznego pola magnetycznego przyłożonego do całego układu. Tutaj XiX_i to macierz Pauliego-X działająca na pojedynczy spin w miejscu ii, a hh oznacza siłę tego zewnętrznego pola.

2. Kodowanie Hamiltonianu

Następnym krokiem jest przetłumaczenie Hamiltonianu na postać, którą komputer kwantowy może przetworzyć — nazywamy to kodowaniem. Ten proces kodowania zależy w decydującym stopniu od rodzaju cząstek w układzie: rozróżnialnych lub nierozróżnialnych, a w przypadku cząstek nierozróżnialnych — od tego, czy są to fermiony czy bozony.

Schemat blokowy przedstawiający różne możliwe typy odwzorowań dla różnych typów układów, w tym bozonów, fermionów oraz rozróżnialnych cząstek takich jak spiny na siatce.

Jeśli masz układ z rozróżnialnymi cząstkami, jak spiny 1/21/2 unieruchomione na siatce, które pokrótce omówiliśmy powyżej, Hamiltonian jest często już zapisany w języku zgodnym z qubitami. Operator Pauliego-Z w naturalny sposób opisuje na przykład spin skierowany w górę lub w dół i nie jest potrzebne żadne specjalne kodowanie.

Przy symulowaniu nierozróżnialnych cząstek — fermionów lub bozonów — konieczne jest zastosowanie transformacji kodowania. Cząstki te opisuje się w specjalnych ramach matematycznych zwanych drugą kwantyzacją, która śledzi liczbę obsadzeń każdego stanu kwantowego poprzez wprowadzenie operatorów kreacji i anihilacji, gdzie operator kreacji a^i\hat{a}_i^\dagger dodaje jedną cząstkę do stanu ii, a operator anihilacji a^i\hat{a}_i usuwa jedną cząstkę ze stanu ii. W oparciu o te ramy drugiej kwantyzacji fermiony można transformować metodą Bravyi-Kitaeva lub Jordana-Wignera. Transformacja Jordana-Wignera definiuje fermionowy operator kreacji f^j=(k<j(Zk))(Xj+iYj2)\hat{f}_j^\dagger = \Bigl( \prod\limits_{k \lt j}{(-Z_k)} \Bigr)\Bigl( \frac{X_j + i Y_j}{2} \Bigr), który wypełnia jj-ty stan kwantowy fermionem, oraz fermionowy operator anihilacji f^j=(k<j(Zk))(XjiYj2)\hat{f}_j= \Bigl( \prod\limits_{k \lt j}{(-Z_k)} \Bigr)\Bigl( \frac{X_j - i Y_j}{2} \Bigr), który usuwa fermion z jj-tego stanu. Więcej szczegółów tej transformacji Jordana-Wignera znajdziesz w naszym kursie Quantum Computing in Practice, odcinek 5 - Mapowanie. Podobnie bozony wymagają własnych metod kodowania, takich jak transformacja Holsteina-Primakoffa, aby można je było reprezentować przez Qubit/kubity.

Ostatecznie, niezależnie od tego, czy ścieżka jest bezpośrednia, czy wymaga tłumaczenia, cel jest ten sam: wyrażenie Hamiltonianu układu w postaci operatorów spinowych Pauliego, które komputer kwantowy może zrozumieć i wykonać.

3. Przygotowanie stanu

Po zakodowaniu żądanego Hamiltonianu w zestawie Gate'ów komputera kwantowego kolejnym ważnym krokiem jest wybór odpowiedniego początkowego stanu kwantowego, od którego rozpocznie się symulacja. Wybór stanu początkowego wpływa nie tylko na zbieżność algorytmów wariacyjnych, takich jak Wariacyjny Solver Wartości Własnych (VQE), ale również na dokładność i efektywność ewolucji czasowej i próbkowania. Zasadniczo stan początkowy służy jako punkt wyjścia dla obliczeń, stanowiąc podstawę do wydobywania użytecznych obserwowalnych z modelowanego układu kwantowego. Idealnie stan ten powinien reprezentować fizycznie sensowną konfigurację badanego układu.

W przypadku wielu symulacji chemii kwantowej stan Hartree-Focka może być dobrym punktem wyjścia. W języku drugiej kwantyzacji stan Hartree-Focka (ϕHF|\phi\rangle_{HF}) tworzy się przez zastosowanie operatorów kreacji (a^i\hat{a}_i^\dagger) dla każdego z orbitali o najniższej energii do stanu próżni (vac=01...0k...0N=0N|vac\rangle = |0_1 ... 0_k ... 0_N\rangle = |0\rangle ^{\otimes N}), czyli stanu bez elektronów.

ϕHF=i=1ka^i0N=a^1...a^k01...0k...0N|\phi\rangle_{HF} = \prod\limits_{i=1}^k \hat{a}_i^\dagger |0\rangle ^{\otimes N} = \hat{a}_1^\dagger ... \hat{a}_k^\dagger |0_1 ... 0_k ... 0_N\rangle

Ponadto łatwy do przygotowania ansatz ze znaczącym pokryciem z prawdziwym stanem podstawowym może służyć jako dobry stan początkowy dla problemów chemicznych, takich jak wyznaczanie energii stanu podstawowego. Ogólnie rzecz biorąc, dowolny stan nn-qubitowy można zapisać jako superpozycję bazowych stanów obliczeniowych ci∣c_i\rangle ze współczynnikami aia_i, spełniającymi warunek normalizacji. Przygotowanie takiego stanu można zasadniczo osiągnąć, stosując odpowiedni operator O^\hat{O} do stanu początkowego, którym umownie jest stan bazowy wszystkich zer.

ψ=i=02n1aici=O^0nwithi=02n1ai2=1|\psi\rangle = \sum_{i=0}^{2^n-1}{a_i |c_i\rangle}=\hat{O}|0\rangle^{\otimes n}\\ \text{with} \qquad \sum_{i=0}^{2^n-1}{|a_i^2|}=1

Jednak ten proces często wymaga wykładniczej liczby bramek CNOT, co sprawia, że jest generalnie zasobochłonny. Dlatego zazwyczaj skupiamy się na przygotowywaniu stanów początkowych, w których wymagania zasobowe są bardziej umiarkowane. Z tego powodu często wybieramy stany mniej złożone. Popularnym i praktycznym wyborem jest stan produktowy, w którym Qubit/kubity nie są splątane — można go przygotować wyłącznie za pomocą operacji na pojedynczych Qubit/kubitach, co znacząco zmniejsza zasobochłonność przygotowania stanu i jego złożoność.

4. Ewolucja czasowa stanu

Teraz, gdy stan początkowy jest ustawiony, możemy w końcu rozpocząć właściwą symulację — zbadać, jak stan układu ϕ(t=0)|\phi(t=0)\rangle zmienił się w ϕ(t)|\phi(t)\rangle po pewnym czasie tt. W mechanice kwantowej ta ewolucja jest opisana przez jedną operację matematyczną zwaną operatorem ewolucji czasowej:

U(t)=eiHtU(t) = e^{-iHt}

gdzie umownie przyjmujemy =1\hbar=1. Zastosowanie tego operatora do naszego stanu początkowego daje stan końcowy: ϕ(t)=eiHtϕ(t=0)|\phi(t)\rangle = e^{-iHt}|\phi(t=0)\rangle

Jednak bezpośrednia implementacja pełnego operatora eiHte^{-iHt} w postaci Circuit kwantowego jest zazwyczaj niemożliwa, gdy nasz Hamiltonian jest sumą różnych składników. Dlatego potrzebujemy Trotteryzacji.

Mówiąc prosto, Trotteryzacja to technika przybliżania eksponentyzacji macierzy (tutaj Hamiltonianu HH), szczególnie gdy wykładnik zawiera niekomutujące operatory ([HA,HB]0[H_A, H_B] \neq 0). Hamiltonian HH często składa się z wielu operatorów, które nie komutują. W takim przypadku nie można rozdzielić ich eksponent:

ei(HA+HB)teiHAteiHBte^{-i(H_A + H_B)t} \neq e^{-iH_A t}e^{-iH_B t}

Użytecznym podejściem jest naprzemienne stosowanie ich eksponent ewolucji czasowej przez małe przedziały czasu t/nt/n, łącznie nn razy. W przypadku tych dwóch niekomutujących składników zapisalibyśmy

eiHt(eiHAt/neiHBt/n)ne^{−i H t}\approx \left(e^{−i H_A t/n}e^{−i H_B t/n}\right)^n

A quantum circuit showing Trotterized time-evolution operators: operators split into small pieces.

Błąd wprowadzany przez to przybliżenie nazywany jest błędem Trottera. Możemy go zmniejszać, zwiększając nn, lecz wiąże się to z kosztem. Istnieją również bardziej zaawansowane formuły wyższego rzędu (drugiego rzędu i inne warianty). Na przykład formuła drugiego rzędu oferuje lepszą dokładność poprzez stosowanie kroków w symetrycznym wzorcu.

First order:eiHt(jeiHit/n)nSecond order:eiHt(j=1NeiHjt/2n)n(k=N1eiHkt/2n)n\begin{aligned} \text{First order:} & \qquad e^{-iHt}\approx \left(\prod_j{e^{-iH_i t/n}}\right)^n\\ \text{Second order:} & \qquad e^{-iHt}\approx \left(\prod_{j=1}^N{e^{-iH_j t/2n}}\right)^n\left(\prod_{k=N}^1{e^{-iH_k t/2n}}\right)^n \end{aligned}

Tutaj NN to liczba niekomutujących składników HjH_j w Hamiltonianie, które mają być w ten sposób rozłożone, a nn to liczba małych kroków czasowych, na które ewolucja jest podzielona. Zwróć uwagę na odwróconą kolejność operatorów w drugim iloczynie w ujęciu drugiego rzędu.

Więcej szczegółów znajdziesz w sekcji Trotteryzacja w kursie Quantum Diagonalization Algorithms.

5. Optymalizacja Circuit

Po wygenerowaniu Trotteryzowanego Circuit krok mapowania jest zakończony i możemy przejść do optymalizacji Circuit. Proces ten obejmuje kilka kluczowych zadań:

  • Ustal układ Qubit/kubitów, który odwzorowuje abstrakcyjne Qubit/kubity Circuit na fizyczne Qubit/kubity sprzętu. Ten krok jest konieczny, ponieważ architektura sprzętu często ma określone ograniczenia dotyczące połączeń, podczas gdy projekty Circuit kwantowych zazwyczaj zakładają, że dowolny Qubit/kubit może oddziaływać z dowolnym innym.
  • Wstaw bramki swap tam, gdzie potrzeba, aby umożliwić oddziaływania między Qubit/kubitami, które nie są bezpośrednio połączone na urządzeniu.
  • Przetłumacz Gate'y Circuit na instrukcje Instruction Set Architecture (ISA), które sprzęt może bezpośrednio wykonać.
  • Przeprowadź optymalizacje Circuit, aby zmniejszyć głębokość Circuit i liczbę Gate'ów. Tę optymalizację można również zastosować wcześniej — na wirtualnym Circuit przed przypisaniem Qubit/kubitów do konkretnych połączeń sprzętowych.

Warto podkreślić, że duża część tego procesu optymalizacji jest obsługiwana automatycznie przez narzędzia w Qiskit. Dokładnie to, jak to działa, zbadamy w dalszej części tej lekcji.

6. Wykonanie Circuit

Po zakończeniu kroku optymalizacji jesteśmy gotowi do wykonania Circuit za pomocą prymitywu. Rozważamy eksperyment symulacyjny, którego celem jest zrozumienie, jak pewne właściwości układu zmieniają się w czasie. W tym celu prymityw Estimator jest najbardziej odpowiednim wyborem, ponieważ pozwala mierzyć wartości oczekiwane obserwowalnych odpowiadających tym właściwościom.

Następnie korzystamy z opcji obejmujących techniki tłumienia i łagodzenia błędów, aby poprawić dokładność Estimatora. Na koniec uruchamiamy eksperyment i zbieramy wyniki.

7. Post-processing

Ostatnim krokiem jest post-processing zebranych danych. Polega to na wyodrębnieniu zmierzonych wartości oczekiwanych lub — jeśli użyto prymitywu Sampler — próbkowanego rozkładu prawdopodobieństwa w bazie obliczeniowej. Gdy potrzebne są jedynie wartości oczekiwane odpowiednich obserwowalnych, można je bezpośrednio uzyskać z prymitywu Estimator, dostępne zarówno jako surowe wyniki, jak i z zastosowanym łagodzeniem błędów. Często te zmierzone wartości oczekiwane stanowią punkt wyjścia do dodatkowych obliczeń dotyczących innych interesujących wielkości. Takie dodatkowe obliczenia zazwyczaj nie wymagają komputera kwantowego i można je efektywnie przeprowadzić na klasycznym komputerze.

Replikacja artykułu „Utility"

uwaga

Ta część to ogólne omówienie samouczka Utility-scale error mitigation with probabilistic error amplification, który replikuje wyniki artykułu Evidence for the Utility of Quantum Computing Before Fault Tolerance. Zdecydowanie zalecamy otwarcie wspomnianego samouczka razem z tą sesją.

Przyjrzymy się teraz konkretnemu przykładowi z bardzo wpływowego artykułu opublikowanego przez IBM w 2023 roku, zatytułowanego Evidence for the Utility of Quantum Computing Before Fault Tolerance, często nazywanego „artykułem Utility".

Okładka artykułu zwanego artykułem Utility, opublikowanego w czasopiśmie Nature.

Od momentu publikacji praca ta szybko stała się przełomowym badaniem w społeczności zajmującej się obliczeniami kwantowymi. Jej główna teza głosi, że zaszumiony komputer kwantowy, wykorzystując 127 qubitów i 2880 Gate'ów, może wyznaczać dokładne wartości oczekiwane dla Circuit'ów kwantowych leżących poza zasięgiem klasycznych metod symulacji brute-force, które próbują dokładnie symulować te same Circuit'y.

Badanie to miało szczególne znaczenie, ponieważ wykazało, że komputery kwantowe mogą służyć do weryfikacji lub porównywania wyników z przybliżonymi klasycznymi metodami symulacji, takimi jak algorytmy sieci tensorowych — zwłaszcza w scenariuszach, w których dokładne rozwiązanie nie jest wcześniej znane.

Kolejnym godnym uwagi aspektem tej pracy jest to, że była szeroko reprodukowana: badacze i użytkownicy mają teraz możliwość replikowania i weryfikowania eksperymentu przy użyciu dostępnych w chmurze systemów kwantowych IBM oraz frameworka Qiskit. W kolejnych krokach przeprowadzimy cię przez etapy tej replikacji, omawiając krok po kroku samouczek IBM.

W tej lekcji omawiamy konkretne kroki wymagane do przetłumaczenia problemu na dane wejściowe, które urządzenie kwantowe może przetworzyć. Skupiamy się na symulowaniu dynamiki całkowitego namagnesowania w układzie magnetycznych spinów dipolowych rozmieszczonych na siatce, poddanym zewnętrznemu polu magnetycznemu. Układ ten można opisać modelem Isinga z poprzecznym polem magnetycznym. Reprezentujemy go za pomocą sparametryzowanego Circuit'u kwantowego, gdzie parametry odpowiadają nastawnnym wartościom oddziaływań spin-spin (ZZZZ) oraz sile zewnętrznego, poprzecznego pola magnetycznego (BxB_x, sparametryzowanego przy użyciu XX).

Spiny na siatce skierowane w górę lub w dół.

Ponieważ ta seria nosi tytuł Quantum Computing in Practice, omówimy dodatkowe szczegóły technik eksperymentalnych stosowanych w celu poprawy jakości wyników. Jedna ważna procedura polega na identyfikowaniu i usuwaniu „złych" qubitów — tych o niskiej wierności Gate'ów lub krótkich czasach dekoherencji — które mogłyby znacząco wpłynąć na wynik eksperymentu. Takie problematyczne qubity mogą wynikać ze słabej kalibracji lub interakcji z układami dwupoziomowymi (TLS). Usunięcie tych qubitów zmienia natywną topologię sprzętu, efektywnie zmieniając sieć, na której symulowany jest układ.

Ponadto omówimy, jak skonstruować sparametryzowany Circuit kwantowy implementujący ewolucję czasową układu przy użyciu Trotterization. Kluczowym elementem tego procesu jest identyfikowanie warstw splątujących w Circuit'cie, które odgrywają istotną rolę w głównej technice łagodzenia błędów.

Qiskit patterns krok 1: Map

Samouczek realizuje krok mapowania podobnie do ogólnego podejścia opisanego powyżej. Specyficznie dla tego problemu samouczek wykonuje następujące czynności:

  • Tworzy sparametryzowany Circuit modelu Isinga
  • Tworzy warstwy splątujące i usuwa złe qubity
  • Generuje wersję Circuit'u opartą na Trotterization

W samouczku zaczynamy od wczesnego tworzenia serii funkcji pomocniczych w notebooku. Funkcje te mają na celu uproszczenie procesu w miarę postępów. Nie są wymaganą częścią procedury, ale to dobra powszechna praktyka podczas pracy nad podobnymi eksperymentami: rozbicie problemu na zarządzalne komponenty. Funkcje obejmują:

  • Usuwanie połączeń qubitów
  • Definiowanie połączeń qubitów
  • Konstruowanie połączeń warstw
  • Konstruowanie warstwy splątującej
  • Definiowanie Circuit'u z Trotterization

Przyjrzyjmy się teraz nieco bliżej tematom związanym z tymi funkcjami.

Połączenia warstw

Połączenia warstw określają, jak qubity oddziałują z sąsiadami podczas symulacji. Nasze urządzenia kwantowe wykorzystują układ heavy-hexagonal, charakterystyczny wzorzec łączenia qubitów. W tym układzie połączenia między qubitami — zwane „krawędziami" — można podzielić na trzy odrębne zestawy. Co ważne, żadne dwa połączenia w tym samym zestawie nie współdzielą qubitu. Taka organizacja odpowiada na kluczowe ograniczenie sprzętowe: w prawdziwym komputerze kwantowym qubit może uczestniczyć tylko w jednej bramce dwuqubitowej w dowolnym momencie.

Mapa z kodowaniem kolorami pokazująca warstwy połączeń. Podkreśla, że bramki dwuqubitowe można wykonywać w całym komputerze kwantowym, nawet jeśli na danym qubicie można jednocześnie wykonać tylko jedną bramkę dwuqubitową.

Organizując wszystkie połączenia w trzy oddzielne warstwy, bramki dwuqubitowe można stosować w całym urządzeniu w trzech kolejnych rundach. Zapewnia to, że żaden qubit nie jest zaangażowany w więcej niż jeden Gate na warstwę. Te Gate'y implementują oddziaływanie ZZ w modelu Isinga i są powtarzane w każdym kroku czasowym symulacji (każdy krok Trotter).

Dodatkowo stosuje się technikę zwaną twirlingiem, która modyfikuje charakterystykę szumów w urządzeniu. Twirling przekształca szum w taki sposób, że nawet proste modele szumów stają się dokładniejszymi reprezentacjami fizycznych błędów. To udoskonalenie umożliwia precyzyjniejszą charakteryzację szumów, którą można następnie wykorzystać do ulepszenia strategii łagodzenia błędów.

Usuwanie „złych" qubitów

Następny krok polega na usunięciu „złych" qubitów z listy fizycznych qubitów dostępnych dla eksperymentu. Qubit może stać się „zły" z różnych powodów. Czasami to po prostu kwestia słabej kalibracji, którą można naprawić przez rekalibrację. W innych przypadkach problem jest bardziej złożony i związany z tak zwanym defektem układu dwupoziomowego (TLS). Te defekty TLS powodują fluktuacje parametrów qubitów i relaksację. Rozwiązanie tego często wymaga nagrzania całego systemu, a następnie ponownego schłodzenia — proces, który może zająć trochę czasu i nie jest możliwy podczas zdalnego dostępu do sprzętu kwantowego przez chmurę.

Na razie najprostszym podejściem jest wykluczenie tych problematycznych qubitów z puli fizycznych qubitów, które będą używane w eksperymencie. IBM Quantum Platform® ułatwia identyfikowanie, które qubity działają poniżej oczekiwań na QPU. Możesz otworzyć QPU i bezpośrednio wizualizować ich charakterystyki na platformie lub pobrać dane z platformy jako plik CSV. Następnie utwórz listę qubitów do wykluczenia i usuń je z całkowitego zestawu fizycznych qubitów urządzenia.

Układ komputera kwantowego z zaznaczonym na różowo qubiitem o niskiej wydajności.

Usuwanie zawodnych qubitów sprawia, że zachowanie systemu jest bardziej przewidywalne, co poprawia dokładność eksperymentu. Umożliwia również lepsze modelowanie szumów, co jest niezbędne do wdrażania skutecznych strategii łagodzenia błędów.

Circuit z Trotterization

Czas teraz skonstruować nasz Circuit z Trotterization. Jak omówiono wcześniej, Trotterization rozbija ewolucję czasową na dyskretne kroki, dlatego musimy wybrać, ile kroków użyć. W tym przykładzie wybierzemy sześć kroków. Ogólnie podejście polega na balansowaniu błędu Trotter — błędu aproksymacji wprowadzonego przez algorytm — z błędami spowodowanymi dekoherencją. Zwiększenie liczby kroków Trotter zmniejsza błąd aproksymacji, ale wymaga głębszych Circuit'ów kwantowych, które są bardziej podatne na szum dekoherencji.

Circuit zostanie zdefiniowany przy użyciu kilku parametrów: parametru theta reprezentującego siłę zewnętrznego pola magnetycznego, połączeń między warstwami, liczby kroków, liczby qubitów oraz oczywiście wyboru backend'u urządzenia. Ponieważ namagnesowanie układu zależy od siły zewnętrznego pola magnetycznego, warto uruchamiać symulację przy różnych wartościach pola magnetycznego. Ta wariacja odpowiada różnym kątom obrotu Gate'u RX w Circuit'cie.

from qiskit.circuit import Parameter

num_steps = 6 #Trotter steps
theta = Parameter("theta")
circuit = trotter_circuit(
theta, layer_couplings, num_steps, qubits = good_qubits, backend = backend
)
num_params = 12

# 12 parameter values for Rx between [0,p/2].
#Reshape to outer product broadcast with observables

parameter_values = np.linespace(0,np.pi/2,num_params).reshape((num_params,1))
num_params = parameter_values.size

Qiskit patterns step 2: Optimize

Teraz, gdy wygenerowaliśmy nasz Circuit, kolejnym krokiem jest jego optymalizacja. Pierwsza część tego procesu polega na zdefiniowaniu menedżera przejść (pass manager). W kontekście Qiskit SDK transpilacja to proces przekształcania wejściowego Circuit do postaci nadającej się do wykonania na urządzeniu kwantowym. Transformacja ta odbywa się przez sekwencję kroków zwanych przejściami transpilatora (transpiler passes). Menedżer przejść to obiekt przechowujący listę tych przejść i mogący stosować je do Circuit. Aby go utworzyć, inicjalizujesz PassManager z żądaną listą przejść transpilatora. Ostatecznie menedżer przejść wytwarza circuit ISA — Circuit wyrażony w terminach Instruction Set Architecture (ISA) backendu. Oznacza to, że Circuit jest reprezentowany przy użyciu Gate'ów natywnych dla sprzętu backendu, choć nie zawiera jeszcze informacji o taktowaniu wymaganych do uruchomienia Circuit na urządzeniu.

Qiskit patterns step 3: Execute using primitives

Nadszedł czas, aby uruchomić nasz Circuit. Użyjemy Estimatora jako głównego narzędzia w tym eksperymencie, ponieważ naszym celem jest pomiar całkowitego namagnesowania układu. Estimator jest specjalnie zaprojektowany do szacowania wartości oczekiwanych obserwowalnych, co czyni go tutaj idealnym wyborem. Na tym etapie konieczne jest również skonfigurowanie ustawień mitygacji błędów. Zastosujemy Zero Noise Extrapolation (ZNE), aby poprawić dokładność wyników. W tutorialu zobaczysz, że podajemy dwie lub więcej wartości współczynnika szumu, dla których oceniane są modele ekstrapolowane, i wybieramy „Probabilistic Error Amplification" (PEA) jako metodę amplifikacji. PEA jest preferowane w tym eksperymencie, ponieważ skaluje się znacznie lepiej niż inne opcje — co jest kluczowe podczas pracy z układami złożonymi ze 100 lub więcej kubitów/qubitów.

To wszystko, co jest potrzebne do uruchomienia eksperymentu.

Przerwa na temat mitygacji błędów

Zanim przejdziemy do post-processingu, zatrzymajmy się na chwilę, aby wyjaśnić, co oznacza Zero Noise Extrapolation (ZNE). Wspominaliśmy o tej koncepcji we wcześniejszych odcinkach, ale warto ją krótko przypomnieć. ZNE to technika mitygacji błędów zaprojektowana w celu zmniejszenia wpływu nieznanego szumu pojawiającego się podczas wykonywania Circuit kwantowych, pod warunkiem że szum ten można skalować w kontrolowany sposób. Metoda opiera się na założeniu, że wartości oczekiwane skalują się z szumem zgodnie ze znaną funkcją:

A(λ)=A(0)+k=0makλk+R,\langle A(\lambda)\rangle = \langle A(0)\rangle + \sum_{k=0}^m {a_k \lambda^k}+R,

gdzie λλ reprezentuje siłę szumu, która może być celowo amplifikowana.

Proces implementacji ZNE składa się z następujących kroków:

  1. Amplifikuj szum Circuit dla różnych współczynników szumu λ1λ_1, λ2λ_2, … .
  2. Wykonaj każdy Circuit ze wzmocnionym szumem, aby zmierzyć odpowiadające wartości oczekiwane A(λ1)\langle A(\lambda_1)\rangle, A(λ2)\langle A(\lambda_2)\rangle, ….
  3. Ekstrapoluj te wyniki z powrotem do granicy zerowego szumu \langle A(λ0)A(\lambda_0)\rangle.

Plots are shown of an expectation value, that same expectation value with noise amplified, and then the value extrapolated back to the case of zero noise.

Technika ta pozwala oszacować, jaki byłby wynik przy braku szumu, poprawiając dokładność obliczeń kwantowych.

Głównym wyzwaniem skutecznej implementacji ZNE jest opracowanie dokładnego modelu szumu dla wartości oczekiwanej oraz amplifikacja szumu w kontrolowany i dobrze zrozumiały sposób. Powszechne techniki amplifikacji błędów w ZNE obejmują skalowanie czasu trwania impulsów poprzez kalibrację, powtarzanie Gate'ów z wykorzystaniem cykli tożsamości oraz dodawanie szumu przez próbkowanie kanałów Pauli — metodę zwaną Probabilistic Error Amplification (PEA).

Spośród nich PEA jest często preferowanym wyborem z kilku powodów:

  • Rozciąganie impulsów (pulse stretching) wiąże się z wysokim kosztem obliczeniowym.
  • Składanie Gate'ów (gate folding), które wykorzystuje wstawienia tożsamości, nie daje mocnych teoretycznych gwarancji zachowania odchylenia szumu.
  • PEA ma zastosowanie do dowolnego Circuit wykonywanego z natywnym współczynnikiem szumu, choć wymaga wcześniejszego poznania modelu szumu.

Three methods of amplifying noise for ZNE are shown: pulse stretching, gate folding, and probabilistic error amplification.

PEA działa w oparciu o założenie warstwowego modelu szumu podobnego do tego stosowanego w probabilistic error cancellation (PEC). Jednak w odróżnieniu od PEC unika wykładniczego narzutu próbkowania, który zazwyczaj rośnie wraz z szumem Circuit. Ta wydajność sprawia, że PEA jest praktycznym i solidnym podejściem do amplifikacji szumu w ZNE, ułatwiając bardziej niezawodną kwantową mitygację błędów. Aby scharakteryzować model szumu, musimy najpierw zidentyfikować odrębne warstwy operacji dwu-qubitowych w Circuit. Dla każdej z tych warstw stosujemy procedurę Pauli twirling do dwu-qubitowych Gate'ów, co pomaga zapewnić, że szum można dokładnie opisać modelem szumu tłumiącego. Następnie powtarzamy pary warstw tożsamości na różnych głębokościach i na koniec dopasowujemy wartości wierności, aby określić współczynniki błędów dla każdego kanału szumu.

Chociaż zrozumienie tej metody koncepcyjnie jest korzystne, jej ręczna implementacja w Qiskit jest znacznie prostsza, jak pokazano w towarzyszącym tutorialu.

Steps are shown in learning a sparse Pauli-Lindblad noise model

Qiskit patterns step 4: Post-process

Po zakończeniu eksperymentu możesz obejrzeć wynik, przeprowadzając jego post-processing. Przerywana szara linia na wykresie przedstawia wyniki uzyskane metodami przybliżonymi klasycznymi, z błędem przybliżenia zredukowanym do niskiego progu. Surowe punkty danych dla różnych współczynników szumu, wybranych na początku, są wyraźnie przesunięte względem tej przerywanej linii. Natomiast ciągła niebieska linia prezentuje dane po zastosowaniu naszego przetwarzania ZNE, co zauważalnie przybliża wyniki do dokładnych wartości. Podsumowując, wartości uzyskane w normalnych warunkach szumu (współczynnik szumu nf=1.0) wykazują znaczące odchylenie od dokładnych wyników. Tymczasem wartości po mitygacji ściśle pokrywają się z dokładnymi, demonstrując skuteczność techniki mitygacji szumu opartej na PEA.

A plot of exact solutions, unmitigated solutions, and mitigated solutions to the problem solved in the utility paper.

Summary

Szybko podsumujmy to, czego się nauczyliśmy:

  • Symulacja kwantowa jest jednym z najbardziej obiecujących obszarów zastosowań w krótko- i średnioterminowej perspektywie.
  • Ma szerokie zastosowania — od farmaceutyki po fizykę wysokich energii, naukę o materiałach i wiele innych dziedzin.
  • Artykuł Utility paper IBM, opublikowany w 2023 roku, wskazał kierunek ku możliwości wykorzystania komputerów kwantowych do odkryć naukowych, a my przeanalizowaliśmy towarzyszący mu tutorial.
  • Kroki prowadzące przez problem symulacji od początku do końca są stosunkowo proste i mamy nadzieję, że możesz teraz korzystać z tego materiału wideo i tutorialu jako przewodnika przy rozwiązywaniu kolejnych problemów symulacyjnych.

Post-course survey

Gratulacje ukończenia tego kursu! Prosimy o chwilę, aby pomóc nam ulepszyć nasz kurs, wypełniając następującą krótką ankietę. Twoje opinie zostaną wykorzystane do poprawy naszej oferty treści i doświadczenia użytkownika. Dziękujemy!

Note: This survey is provided by IBM Quantum and relates to the original English content. To give feedback on doQumentation's website, translations, or code execution, please open a GitHub issue.