Udostępnij za pośrednictwem


Wprowadzenie do poprawki błędów kwantowych

W tym artykule opisano podstawy kwantowej korekty błędów, typów błędów kwantowych i niektórych typowych kodów poprawek błędów kwantowych. Zawiera również przykład sposobu poprawiania błędów przy użyciu kodu z trzema kubitami.

Co to jest korekta błędów kwantowych?

Korekta błędów kwantowych (QEC) to technika umożliwiająca ochronę informacji kwantowych przed błędami. Korekta błędów jest szczególnie ważna w komputerach kwantowych, ponieważ wydajne algorytmy kwantowe korzystają z komputerów kwantowych na dużą skalę, które są wrażliwe na szumy.

Podstawową zasadą poprawek błędów kwantowych jest zwiększenie liczby bitów używanych do kodowania danej ilości informacji. Ta nadmiarowość umożliwia kodowi wykrywanie i poprawianie błędów.

Współczynnik błędów dla komputerów kwantowych jest zwykle wyższy niż błędy klasycznego komputera ze względu na wyzwania związane z tworzeniem i operacyjnymi systemami kwantowymi. Szumy, oddzielenie i niedoskonałości bram kwantowych mogą powodować błędy w obliczeniach kwantowych. Bieżące komputery kwantowe mają współczynniki błędów w zakresie od 1% do 0,1%. Innymi słowy, oznacza to, że średnio co 100 do 1000 operacji bramy kwantowej powoduje wystąpienie błędu.

Typy błędów kwantowych

Istnieją dwa podstawowe typy błędów kwantowych: przerzucanie bitów i przerzucanie faz.

Błędy przerzucania bitów występują, gdy kubit zmienia się z $\ket{0}$ na $\ket{1}$ lub na odwrót. Błędy przerzucania bitów są również nazywane błędami \sigma_x, ponieważ mapują stany kubitu $\sigma_x$$\ket{0}= i \ket{\sigma_x{1}$$\ket{{1}=\ket{0}$. Ten błąd jest analogiczny do klasycznego błędu przerzucania bitów.

Błędy zmiany fazy występują, gdy kubit zmienia swoją fazę. Są one również nazywane \sigma_z-errors, ponieważ mapują stany kubitu $\sigma_z$$\ket{0}= i \ket{\sigma_z{0}$$\ket{ -.{1}=\ket{1}$ Ten typ błędu nie ma klasycznego analogu.

W obliczeniach kwantowych błędy kwantowe mogą manifestować się jako przerzucania bitów, przerzucania faz lub kombinacji obu tych operacji.

Jak działa korekta błędów kwantowych?

Kody poprawek błędów kwantowych działają przez kodowanie informacji kwantowych do większego zestawu kubitów nazywanych kubitami fizycznymi. Wspólny stan kubitów fizycznych reprezentuje kubit logiczny.

Fizyczne kubity podlegają błędom z powodu niespójności i niedoskonałości bram kwantowych. Kod został zaprojektowany tak, aby można było wykrywać i poprawiać błędy przez pomiar niektórych kubitów w kodzie.

Załóżmy na przykład, że chcesz wysłać wiadomość z pojedynczym kubitem $\ket{0}$. Możesz użyć trzech kubitów fizycznych do zakodowania komunikatu, wysyłając $\ket{000}$, które jest znane jako słowo kodowe. Ten kod korygujący błędy jest kodem powtórzenia, ponieważ komunikat jest powtarzany trzy razy.

Teraz wyobraź sobie, że podczas transmisji występuje błąd zmiany wartości pojedynczego bitu, tak że odbiorca otrzymał stan $\ket{010}$. W tym scenariuszu odbiorca może wywnioskować, że zamierzony komunikat to $\ket{000}$. Jeśli jednak komunikat podlega dwóm błędom przerzucania bitów, odbiorca może wywnioskować niepoprawny komunikat. Na koniec, jeśli wszystkie trzy bity są przerzucane tak, aby oryginalna wiadomość $\ket{000}$ stała się $\ket{111}$, odbiorca nie ma możliwości poznania błędu.

Odległość kodu QEC to minimalna liczba błędów, które zmieniają jedno słowo kodowe na inne, czyli liczba błędów, których nie można wykryć. Odległość $kodu d$ można zdefiniować jako

$$d = 2t + 1$$

gdzie $t$ to liczba błędów, które kod może poprawić. Na przykład kod trój bitowy może wykrywać i poprawiać jeden błąd przerzucania bitów, więc $t = 1$, a tym samym odległość kodu wynosi $d = 3$.

Należy pamiętać, że kody powtórzeń, takie jak kod trój bitowy używany w tym przykładzie, mogą poprawiać tylko błędy przerzucania bitów, a nie błędy przerzucania fazy. Aby poprawić oba typy błędów, potrzebne są bardziej zaawansowane kody poprawek błędów kwantowych.

Typy kodów QEC

Istnieje wiele różnych typów kodów QEC, z których każdy ma własne właściwości i zalety. Oto niektóre typowe kody QEC:

  • Kod powtórzeń: najprostszy kod korekty błędu kwantowego, w którym pojedynczy kubit jest zakodowany w wielu kubitach, powtarzając go wiele razy. Kod powtórzeń może poprawić błędy przerzucania bitów, ale nie błędy zmiany fazy.

  • Kodhora: pierwszy kod poprawki błędów kwantowych opracowany przez Petera Shora. Koduje jeden kubit logiczny do dziewięciu kubitów fizycznych. Kod Shora może poprawić błąd pojedynczego bitu lub błąd odwrócenia fazy, ale nie może poprawić obu typów błędów jednocześnie.

  • Kod Steane: jest to kod siedmiokubitowy, który może korygować błędy przerzucania bitów i przerzucania fazy. Ma to zaletę odporności na uszkodzenia, co oznacza, że sam proces poprawiania błędów nie wprowadza dodatkowych błędów.

  • Kod powierzchni: jest to kod korekty błędu topologicznego, który używa dwuwymiarowej siatki kubitów do kodowania kubitów logicznych. Ma on wysoki próg korekty błędów i jest uważany za jedną z najbardziej obiecujących technik obliczeń kwantowych o dużej skali, odpornej na błędy. Kod powierzchniowy jest używany przez Azure Quantum Resource Estimator.

  • Hastings-Haah kod: Ten kod poprawki błędów kwantowych oferuje lepsze koszty przestrzenno-czasowe niż kody powierzchni na kubitach Majorana w wielu przypadkach. W przypadku zestawów instrukcji opartych na bramie obciążenie jest większe, co sprawia, że takie podejście jest mniej wydajne niż kod powierzchni.

Przykład: kod z trzema kubitami

Kod korekcji błędów z trzema kubitami to prosty kod powtórzeniowy, który pozwala na wykrywanie i poprawianie błędu zamiany bitu. Koduje jeden kubit logiczny do trzech kubitów fizycznych, powtarzając kubit trzy razy.

Napiwek

Zapoznaj się z Q# przykładem kodu trzykubitowego.

Wyobraź sobie, że chcesz wysłać dowolny pojedynczy kubit $\ket{\phi}=\alpha\ket{{0} + \beta\ket{1}$. Aby uniknąć błędów, kodujesz stany $\ket{0}$ bazowe i $\ket{1}$ do wspólnego stanu trzech kubitów. Dwa bazowe stany logiczne to $\ket{0_L}=\ket{000}$ i $\ket{1_L}=\ket{111}$.

W związku z tym pojedynczy kubit $\ket{\phi}=\alpha\ket{{0}+ \beta\ket{1}$ jest zakodowany jako:

$$\ket{\phi } = \alpha \ket{ {000}_L + \beta\ket{{111}=\alpha\ket{0_L} + 1_L \beta\ket{}$$

Przeanalizujmy kroki kodu z trzema kubitami.

Przygotowywanie kubitów

Najpierw kodujesz pojedynczy kubit $\ket{\phi}=\alpha\ket{{0} +\beta\ket{1}$ do wspólnego stanu trzech kubitów.

Następnie przygotujesz dwa kolejne kubity w stanie $\ket{0}$. W związku z tym globalny stan wszystkich trzech kubitów to $(\alpha\ket{0} +\beta\ket{1})\ket{0}\ket{0}=\alpha\ket{{000} + \beta\ket{{100}$.

Na koniec kodujesz pojedynczy kubit do wspólnego stanu trzech kubitów, stosując dwie operacje CNOT. Pierwszy CNOT używa pierwszego kubitu jako kontrolki i działa na drugim kubitie, tworząc $\alpha\ket{000} + \beta\ket{110}$. Drugi CNOT używa pierwszego kubitu jako kontrolki i działa na trzecim kubitie. Stan trzech kubitów to teraz $\alpha\ket{000} + \beta\ket{111}$.

Wysyłanie kubitów

Wysyłasz wszystkie trzy kubity. Zakładając, że mogą wystąpić tylko jednobitowe błędy zamiany bitów, odebrane kubity znajdują się w jednym z następujących stanów:

Stan Błąd
$\alpha \ket{000} + \beta\ket{111}$ Brak błędów
$\alpha \ket{100} + \beta\ket{011}$ Kubit 1
$\alpha \ket{010} + \beta\ket{101}$ Kubit 2
$\alpha \ket{001} + \beta\ket{110}$ Kubit 3

Dodawanie kubitów pomocniczych

Najpierw wprowadzasz dwa kolejne kubity przygotowane w stanie $\ket{00}$. Ta para pomocnicza kubitów służy do wyodrębniania informacji o błędzie bez bezpośredniego pomiaru lub uzyskiwania informacji o stanie logicznym.

Następnie wykonasz cztery operacje CNOT: pierwsze dwie operacje używają pierwszego i drugiego odebranych kubitów jako kontroli i działają na pierwszym pomocniczym kubitie, a ostatnie dwie operacje używają pierwszego i trzeciego odebranych kubitów jako kontroli i działają na drugim bitzie pomocniczym. Łączny stan wszystkich pięciu kubitów wynosi teraz:

Stan Błąd
$(\alpha\ket{000} + \beta\ket{111})\ket{00}$ Brak błędów
$(\alpha\ket{100} + \beta\ket{011})\ket{11}$ Kubit 1
$(\alpha\ket{010} + \beta\ket{101})\ket{10}$ Kubit 2
$(\alpha\ket{001} + \beta\ket{110})\ket{01}$ Kubit 3

Pobieranie syndromu błędu

Aby pobrać informacje o błędzie, należy zmierzyć dwa pomocnicze kubity w stanach $\ket{0}$ i $\ket{1}$ bazy obliczeniowej. Dzięki temu odzyskujesz stan wspólny, który nazywany jest syndromem błędu, ponieważ pomaga w diagnozowaniu błędów w odebranych kubitach.

Teraz wiesz, w których z czterech możliwych stanów znajdują się trzy odebrane kubity. Błąd można naprawić, stosując operację korekty. W takim przypadku masz do czynienia z błędami przerzucania bitów, więc korekta jest operacją \sigma_x$ zastosowaną $do jednego (lub żadnego) kubitów.

Jeśli na przykład zespół błędu to $\ket{00}$, odebrane kubity znajdują się w stanie $\alpha\ket{{000} + \beta\ket{{111}$, czyli jest to stan, który został pierwotnie wysłany. Jeśli zespół błędu to $\ket{11}$, odebrane kubity znajdują się w stanie $\alpha\ket{{100} + b\ket{{011}$. W pierwszym kubitie występuje błąd przerzucania bitów, który można poprawić, stosując operację $\sigma_x$ do pierwszego kubitu.

Syndrom błędu Zwiń stan Korekta
$\ket{00}$ $ \alpha \ket{000} + \beta\ket{111}$ Nic nie rób
$\ket{01}$ $\alpha \ket{100} + \beta\ket{011}$ Zastosuj $\sigma_x$ do kubitu 3
$\ket{10}$ $\alpha \ket{010} + \beta\ket{101}$ Zastosuj $\sigma_x$ na kubit 2
$\ket{11}$ $\alpha \ket{001} + \beta\ket{110}$ Zastosuj $\sigma_x$ do kubitu 1

Wyodrębnianie oryginalnego kubitu

Na koniec, aby wyodrębnić pojedynczy kubit, który chcesz przesłać pierwotnie, stosujesz dwie operacje CNOT: jeden używa pierwszego kubitu jako kontrolki i działa na drugim kubitie, a drugi używa pierwszego kubitu jako kontrolki i działa na trzecim.

Stan pierwszego kubitu to teraz $\alpha\ket{0} + \beta\ket{1}$, czyli oryginalny kubit, który chcesz przesłać.

Ważne

Kod QEC nie uzyskuje żadnych informacji dotyczących współczynników $\alpha$ i $\beta$, dlatego superpozycje stanu obliczeniowego pozostają nienaruszone podczas poprawiania.