Перейти до основного вмісту

9-кубітний код Шора

Тепер перейдемо до 9-кубітного коду Шора — квантового коду виправлення помилок, який отримується об'єднанням двох кодів із попереднього розділу: 3-бітового коду повторення для кубітів, який дозволяє виправити одну помилку перевертання біта, та модифікованої версії цього коду, яка дозволяє виправити одну помилку перевертання фази.

Опис коду

9-кубітний код Шора отримується шляхом конкатенації двох кодів із попереднього розділу. Це означає, що спочатку застосовується одне кодування, яке кодує один кубіт у три, а потім до кожного з трьох кубітів першого кодування застосовується друге кодування, в результаті чого отримуємо дев'ять кубітів загалом.

Якщо бути точнішим, хоча обидва коди в цьому конкретному випадку можна застосовувати в будь-якому порядку, ми виберемо такий: спочатку застосуємо модифіковану версію 3-бітового коду повторення (яка виявляє помилки перевертання фази), а потім закодуємо кожен із трьох отриманих кубітів незалежно за допомогою звичайного 3-бітового коду повторення (який виявляє помилки перевертання бітів). Нижче наведена схема цього кодування.

Схема кодування для 9-кубітного коду Шора з трьома блоками

Як видно з рисунка, дев'ять кубітів коду Шора ми розглядатимемо як три блоки по три кубіти, де кожен блок отримується на другому кроці кодування (тобто за допомогою звичайного 3-бітового коду повторення). Звичайний 3-бітовий код повторення, що застосовується тут тричі незалежно, називається внутрішнім кодом, тоді як зовнішній код — це код, використаний на першому кроці кодування, тобто модифікована версія 3-бітового коду повторення, що виявляє помилки перевертання фази.

Код також можна описати, вказавши, як кодуються два стани стандартного базису вихідного кубіта.

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) \\[4mm] \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}

Знаючи це, можна за допомогою лінійності визначити, як кодується довільний вектор стану кубіта.

Виправлення помилок перевертання біта та фази

Помилки та вентилі CNOT

Для аналізу того, як помилки XX та ZZ впливають на кодування кубітів — як для 9-кубітного коду Шора, так і для інших кодів, — корисно зауважити кілька простих зв'язків між цими помилками та вентилями CNOT. Перш ніж аналізувати 9-кубітний код Шора, зупинимося на цьому.

Схеми нижче ілюструють три основні зв'язки між вентилями XX та CNOT. Зокрема, застосування вентиля XX до цільового кубіта перед CNOT еквівалентне зміні порядку: спочатку CNOT, потім XX на цільовому кубіті. Застосування вентиля XX до керуючого кубіта перед CNOT еквівалентне застосуванню CNOT спочатку, а потім вентилів XX на обох кубітах. Нарешті, застосування вентилів XX до обох кубітів перед CNOT еквівалентне спочатку CNOT, а потім вентиля XX на керуючому кубіті. Ці зв'язки можна перевірити, виконавши відповідні матричні множення або обчисливши ефект схем на станах стандартного базису.

Помилки X до та після вентилів CNOT

Для вентилів ZZ ситуація аналогічна, але ролі керуючого та цільового кубітів міняються місцями. Зокрема, маємо три зв'язки, зображені такими квантовими схемами.

Помилки Z до та після вентилів CNOT

Виправлення помилок перевертання біта

Тепер розглянемо, як можна виявляти та виправляти помилки за допомогою 9-кубітного коду Шора, починаючи з помилок перевертання біта — які ми надалі для стислості називатимемо XX-помилками.

Для виявлення та виправлення XX-помилок можна просто обробляти кожен із трьох блоків кодування окремо. Кожен блок є кодуванням кубіта за допомогою 3-бітового коду повторення, який захищає від XX-помилок, — тому, виконавши для кожного блоку вимірювання синдрому та виправлення XX-помилок, описані раніше, ми можемо виявити та виправити не більш ніж одну XX-помилку в кожному блоці. Зокрема, якщо серед дев'яти кубітів кодування є не більш ніж одна XX-помилка, ця процедура виявить і виправить її.

Коротко кажучи, виправлення помилок перевертання біта є простою справою для цього коду завдяки тому, що внутрішній код виправляє помилки перевертання біта.

Виправлення помилок перевертання фази

Далі розглянемо помилки перевертання фази, або ZZ-помилки для стислості. Тут ситуація дещо менш очевидна, оскільки за виявлення ZZ-помилок відповідає зовнішній код, але внутрішній код ніби «стоїть на перешкоді», дещо ускладнюючи виявлення та виправлення цих помилок.

Припустимо, що ZZ-помилка відбулась на одному з 9 кубітів коду Шора, наприклад на позначеному в цій діаграмі.

Z-помилка на кубіті для 9-кубітного коду Шора

Ми вже спостерігали, що відбувається при ZZ-помилці під час використання 3-бітового коду повторення — це еквівалентно ZZ-помилці до кодування. У контексті 9-кубітного коду Шора це означає, що ZZ-помилка на будь-якому з трьох кубітів у блоці завжди має однаковий ефект — еквівалентний ZZ-помилці на відповідному кубіті до застосування внутрішнього коду.

Наприклад, схема вище є еквівалентною такій схемі. Це можна обґрунтувати за допомогою зв'язків між ZZ та вентилями CNOT, описаних вище, або просто обчислюючи ефект схем на довільному стані кубіта ψ.\vert\psi\rangle.

Z-помилка перед внутрішнім кодом для 9-кубітного коду Шора

Це підказує один варіант виявлення та виправлення ZZ-помилок: декодувати внутрішній код, що залишить нам три кубіти зовнішнього кодування та шість ініціалізованих робочих кубітів. Потім можна перевірити ці три кубіти зовнішнього коду на наявність ZZ-помилок, а після цього знову закодувати за допомогою внутрішнього коду, повернувшись до 9-кубітного кодування коду Шора. Якщо виявлено ZZ-помилку, її можна виправити або до повторного кодування за допомогою внутрішнього коду, або після нього — застосувавши вентиль ZZ до будь-якого кубіта у цьому блоці.

Нижче наведена схема, що включає схему кодування, описану вище помилку, а також щойно описані кроки (але без самого кроку виправлення).

Виявлення Z-помилки для 9-кубітного коду Шора

У цьому конкретному прикладі вимірювання синдрому дає 11,11, що вказує на ZZ-помилку в одному з кубітів середнього блоку.

Одна з переваг виправлення ZZ-помилок після кроку повторного кодування полягає в тому, що наведену вище схему можна спростити. Наступна схема є еквівалентною, але вимагає на чотири вентилі CNOT менше.

Спрощене виявлення Z-помилки для 9-кубітного коду Шора

Знову ж таки, синдром не вказує, на якому саме кубіті відбулася ZZ-помилка, а лише на те, в якому блоці сталася ця помилка, — ефект однаковий незалежно від того, який кубіт у блоці був уражений. Потім можна виправити помилку, застосувавши вентиль ZZ до будь-якого з трьох кубітів ураженого блоку.

Тут, до речі, маємо приклад виродженості квантового коду виправлення помилок: ми здатні виправити певні помилки (ZZ-помилки у цьому випадку), не маючи змоги однозначно їх ідентифікувати.

Одночасні помилки перевертання біта та фази

Ми вже бачили, як за допомогою 9-кубітного коду Шора можна виявляти та виправляти як XX-, так і ZZ-помилки, і зокрема як можна виявляти та виправляти не більш ніж одну XX-помилку або не більш ніж одну ZZ-помилку. Тепер припустимо, що відбулися обидві: і помилка перевертання біта, і помилка перевертання фази, — можливо, навіть на одному кубіті. Як виявляється, у такій ситуації не потрібно робити нічого відмінного від уже описаного — код здатний виявляти та виправляти не більш ніж одну XX-помилку і одну ZZ-помилку одночасно без жодних додаткових змін.

Якщо говорити точніше, XX-помилки виявляються шляхом застосування вимірювання синдрому звичайного 3-бітового коду повторення, яке виконується окремо для кожного з трьох блоків по три кубіти; а ZZ-помилки виявляються за допомогою процедури, описаної вище, що еквівалентна декодуванню внутрішнього коду, виконанню вимірювання синдрому модифікованого 3-бітового коду повторення для помилок перевертання фази, а потім повторному кодуванню. Ці два кроки виявлення помилок — а також відповідні виправлення — можна виконувати повністю незалежно один від одного, і насправді не важливо, в якому порядку їх виконувати.

Щоб зрозуміти чому, розглянемо приклад, зображений на такій схемі, де і XX-, і ZZ-помилка вплинули на нижній кубіт середнього блоку.

XZ-помилка для 9-кубітного коду Шора

Спочатку зауважимо, що порядок помилок не важливий: перестановка XX та ZZ помилок дає еквівалентну схему. Уточнимо: XX та ZZ не є комутативними, вони антикомутативні:

XZ=(0110)(1001)=(0110)=(1001)(0110)=ZX.XZ = \begin{pmatrix} 0 & 1\\[1mm] 1 & 0 \end{pmatrix} \begin{pmatrix} 1 & 0\\[1mm] 0 & -1 \end{pmatrix} = \begin{pmatrix} 0 & -1\\[1mm] 1 & 0 \end{pmatrix} = - \begin{pmatrix} 1 & 0\\[1mm] 0 & -1 \end{pmatrix} \begin{pmatrix} 0 & 1\\[1mm] 1 & 0 \end{pmatrix} = -ZX.

З цього випливає, що така схема еквівалентна наведеній вище з точністю до глобального фазового множника 1.-1.

ZX-помилка для 9-кубітного коду Шора

Тепер можна перемістити ZZ-помилку, як і раніше, щоб отримати ще одну еквівалентну схему.

ZX-помилка для 9-кубітного коду Шора

На цьому етапі очевидно, що якщо спочатку виконати процедуру виявлення та виправлення XX-помилок, XX-помилку буде виправлено, після чого можна виконати процедуру виявлення та виправлення ZZ-помилок, щоб усунути ZZ-помилку, як і раніше.

Альтернативно, спочатку можна виконати процедуру виявлення та виправлення ZZ-помилок. Те, що ця процедура спрацьовує коректно навіть за наявності однієї або кількох XX-помилок, випливає з того, що вентилі XX на будь-якому з дев'яти кубітів кодування комутують з усіма вентилями у нашій спрощеній схемі вимірювання синдрому для ZZ-помилок. Таким чином, це вимірювання синдрому все одно правильно визначить, який блок постраждав від ZZ-помилки. Те, що ZZ-помилка на будь-якому блоці виправляється застосуванням вентиля ZZ до будь-якого кубіта цього блоку, навіть якщо також відбулася XX-помилка, випливає з того самого аргументу про порядок XX та ZZ вентилів, що дає еквівалентні схеми з точністю до глобальної фази.

З цього випливає, що 9-кубітний код Шора може виправляти XX-помилку, ZZ-помилку або обидві одночасно на будь-якому з дев'яти кубітів цього коду. Насправді він може виправляти більше помилок, включаючи кілька XX-помилок (якщо вони знаходяться в різних блоках) або кілька ZZ-помилок (якщо не більш ніж один блок зазнав непарної їх кількості) — але для цілей цього уроку найважливіше те, що ми можемо виправити XX-помилку, ZZ-помилку або обидві на будь-якому одному кубіті.

Зменшення помилок для випадкових збоїв

Перш ніж перейти до останнього розділу уроку, що стосується довільних квантових помилок, коротко розглянемо продуктивність 9-кубітного коду Шора, коли помилки, описані матрицями Паулі, виникають випадково на кубітах.

Конкретніше, розглянемо просту модель шуму, де помилки виникають незалежно на кубітах, кожен кубіт зазнає помилки з імовірністю p,p, і між помилками на різних кубітах немає кореляції — подібно до двійкового симетричного каналу для класичних бітів. Можна призначити різні ймовірності для виникнення помилок X,X, YY та Z,Z, але для максимальної простоти розглянемо найгірший сценарій для 9-кубітного коду Шора: на кожному ураженому кубіті відбувається YY-помилка. До речі, YY-помилка еквівалентна (з точністю до незначущого глобального фазового множника) одночасним XX- та ZZ-помилкам на одному кубіті, враховуючи, що Y=iXZ.Y = iXZ. Це пояснює нашу очевидну байдужість до YY-помилок аж до цього моменту.

Нехай Q\mathsf{Q} — кубіт у деякому конкретному стані, який ми хочемо захистити від помилок. Розглянемо варіант використання 9-кубітного коду Шора. Природно запитати: «Чи варто його використовувати?»

Відповідь не обов'язково «так». Якщо шуму занадто багато, тобто в цьому контексті pp занадто велике, використання коду Шора може насправді погіршити ситуацію — так само як 3-бітовий код повторення гірший за відсутність коду при pp більше половини. Але якщо pp достатньо мале, то відповідь «так», варто використовувати код, оскільки він зменшить ймовірність пошкодження закодованого стану. Подивимося, чому це так, і що означає «занадто велике» або «достатньо мале» значення pp для цього коду.

Код Шора виправляє будь-яку помилку Паулі на одному кубіті, включаючи, звичайно, YY-помилку, але не виправляє дві або більше YY-помилок коректно. Слід уточнити: ми припускаємо, що використовуємо виправлення XX- та ZZ-помилок, описані раніше в розділі. (Звичайно, якщо ми знаємо заздалегідь, що нам потрібно турбуватися лише про YY-помилки, то природно вибрали б виправлення по-іншому — але це «шахрайство» з моделлю шуму, і завжди можна було б змінити модель, обравши інші помилки Паулі, щоб змусити цей новий вибір виправлень зазнавати невдачі при двох або більше уражених кубітах.)

Отже, код захищає Q\mathsf{Q}, поки не більш ніж один із дев'яти кубітів уражений помилкою, що відбувається з імовірністю

(1p)9+9p(1p)8.(1-p)^9 + 9 p (1-p)^8.

Інакше, з імовірністю

1(1p)99p(1p)8,1 - (1-p)^9 - 9 p (1-p)^8,

код не зможе захистити Q.\mathsf{Q}.

Конкретно це означає, що з точністю до глобальної фази до нашого кубіта Q\mathsf{Q} (як логічного кубіта) буде застосована ненульова операція Паулі. Тобто якщо XX- та ZZ-помилки виявляються та виправляються для коду Шора, як описано раніше в уроці, ми отримаємо кодування стану, що еквівалентний, з точністю до глобальної фази, кодуванню стану вихідного Q\mathsf{Q} після застосування ненульової операції Паулі. Коротше кажучи, відбудеться логічна помилка. Це може вплинути, а може і не вплинути на вихідний стан Q\mathsf{Q} — іншими словами, логічного кубіта, закодованого за допомогою дев'яти фізичних кубітів, — але для цього аналізу ми розглядаємо цю подію як невдачу.

З іншого боку, якщо не використовувати код, єдиний кубіт зазнає аналогічної долі (піддасться ненульовій операції Паулі) з імовірністю p.p. Код корисний тоді, коли перша ймовірність менша за другу:

1(1p)99p(1p)8<p.1 - (1-p)^9 - 9 p (1-p)^8 < p.

Нижче наведений графік, який ілюструє для дуже малих значень p,p, що код дає перевагу, а точка беззбитковості знаходиться приблизно при 0.0323.0.0323.

Графік імовірності помилки для незалежних Y-помилок з використанням коду Шора

Якщо pp менше цієї точки беззбитковості, код допомагає; у точці беззбитковості ймовірності рівні, тому ми просто витрачаємо час і 8 кубітів даремно; а за межею точки беззбитковості абсолютно не варто використовувати цей код, бо він збільшує ймовірність логічної помилки на Q.\mathsf{Q}.

Три з чвертю відсотки або близько того можуть здатися не дуже хорошою точкою беззбитковості — особливо у порівнянні з 50%,50\%, що є аналогічною точкою беззбитковості для 3-бітового коду повторення для класичної інформації. Ця різниця значною мірою пояснюється тим, що квантова інформація є більш делікатною і її важче захистити, ніж класичну. Але також — визнаючи, що 9-кубітний код Шора є блискучим відкриттям як перший у світі квантовий код виправлення помилок, — слід визнати, що в практичному відношенні він насправді не є дуже хорошим кодом.