주 콘텐츠로 건너뛰기

반복 코드

이 레슨은 반복 코드에 대한 논의로 시작합니다. 반복 코드는 qubit에서 발생할 수 있는 모든 유형의 오류에 대해 양자 정보를 보호하지는 못하지만, 다음 레슨에서 살펴볼 9-Qubit Shor 코드의 기초를 이루며, 오류 정정의 기본 원리를 설명하는 데에도 유용합니다.

고전 인코딩과 디코딩

반복 코드는 오류 정정 코드의 극히 기본적인 예시입니다. 아이디어는 각 비트를 일정한 횟수만큼 반복함으로써 비트를 오류로부터 보호할 수 있다는 것입니다.

특히, 먼저 고전 정보의 맥락에서 3-비트 반복 코드를 고려해 봅시다. 이 코드는 한 비트를 세 번 반복하여 세 비트로 인코딩하므로, 00000000으로 인코딩되고 11111111로 인코딩됩니다.

00001111\begin{aligned} 0 & \mapsto 000\\ 1 & \mapsto 111 \end{aligned}

아무 문제가 없다면, 인코딩으로부터 원래 비트의 두 가지 가능성을 명백히 구별할 수 있습니다. 요점은 오류가 발생하여 세 비트 중 하나가 뒤집혔을 때, 즉 0이 1로 바뀌거나 1이 0으로 바뀌었을 때에도, 두 이진값 중 어느 것이 두 번 나타나는지를 판단함으로써 원래 비트가 무엇이었는지를 알아낼 수 있다는 것입니다. 동등하게, 다수결 값(즉, 가장 자주 나타나는 이진값)을 계산하여 디코딩할 수 있습니다.

abcmajority(a,b,c)a b c \mapsto \operatorname{majority}(a,b,c)

물론 인코딩의 2비트 또는 3비트가 뒤집히면 디코딩이 제대로 작동하지 않고 잘못된 비트가 복원되지만, 3비트 중 최대 1비트만 뒤집힌다면 디코딩은 정확합니다. 이것은 일반적으로 오류 정정 코드의 전형적인 속성입니다. 즉, 오류 정정을 허용할 수 있지만 오류가 너무 많지 않을 때만 가능합니다.

이진 대칭 채널의 잡음 감소

반복 코드를 사용하여 오류를 범할 확률을 낮출 수 있는 상황의 예로, 가상의 수신자에게 단일 비트를 전달하는 것이 목표이며, 소위 이진 대칭 채널을 통해 비트를 전송할 수 있다고 가정해 봅시다. 이 채널은 전송되는 각 비트를 어떤 확률 pp로 독립적으로 뒤집습니다. 즉, 확률 1p1-p로 수신자는 채널을 통해 전송된 비트를 그대로 받지만, 확률 pp로 비트가 뒤집혀 수신자는 반대 비트 값을 받게 됩니다.

따라서, 3-비트 반복 코드를 사용하지 않고 원하는 비트를 채널을 통해 그대로 보내기로 선택한다면, 수신자는 확률 pp로 잘못된 비트를 받게 됩니다. 반면, 전송하려는 비트를 먼저 3-비트 반복 코드로 인코딩한 다음 인코딩의 세 비트를 각각 채널을 통해 보낸다면, 각 비트는 확률 pp로 독립적으로 뒤집힙니다. 이제는 뒤집힐 수 있는 비트가 하나가 아닌 세 개이므로 비트 플립이 일어날 가능성은 더 커지지만, 최대 하나의 비트만 뒤집히면 수신자는 올바르게 디코딩할 것입니다. 따라서 전송 중 2개 이상의 비트가 뒤집힐 때만 디코딩 후에도 오류가 지속됩니다.

전송 중 두 비트가 뒤집힐 확률은 3p2(1p)3p^2(1-p)이며, 이는 뒤집히지 않는 비트에 대한 세 가지 선택 각각에 대해 p2(1p)p^2(1-p)이고, 세 비트가 모두 뒤집힐 확률은 p3p^3입니다. 따라서 두 개 또는 세 개의 비트 플립이 일어날 총 확률은 다음과 같습니다.

3p2(1p)+p3=3p22p3.3 p^2 (1 - p) + p^3 = 3 p^2 - 2 p^3.

pp의 값이 1/2보다 작은 경우, 이는 수신자가 잘못된 비트를 받을 확률의 감소를 가져옵니다. 이 경우에도 여전히 오류 가능성이 있지만, 코드는 그 가능성을 감소시킵니다. (반대로 pp의 값이 1/2보다 경우에는 코드가 실제로 수신자가 잘못된 비트를 받을 가능성을 증가시킵니다.)

3비트 반복 코드의 이진 대칭 채널에 대한 오류 확률 그래프

Qubit 인코딩

3-비트 반복 코드는 고전 오류 정정 코드이지만, 이를 qubit을 오류로부터 보호하는 데 사용하려고 시도하면 어떤 일이 일어나는지 고려해 볼 수 있습니다. 앞으로 보게 되겠지만, 이는 실제로 일부 오류의 가능성을 증가시키기 때문에 그리 인상적인 양자 오류 정정 코드는 아닙니다. 그러나 이는 Shor 코드로 나아가는 첫걸음이며, 교육적 관점에서 우리에게 유용할 것입니다.

분명히 하자면, 3-비트 반복 코드가 qubit에 사용된다고 할 때, 우리는 표준 기저 상태가 세 번 반복되는 qubit의 인코딩을 염두에 두고 있으며, 단일 qubit 상태 벡터는 다음과 같이 인코딩됩니다.

α0+β1α000+β111\alpha \vert 0\rangle + \beta \vert 1\rangle \mapsto \alpha \vert 000\rangle + \beta \vert 111\rangle

이 인코딩은 초기화된 작업 공간 qubit 두 개와 두 개의 controlled-NOT Gate를 사용하는 다음 양자 Circuit에 의해 쉽게 구현됩니다.

3비트 반복 코드의 인코딩 회로

특히, 이 인코딩은 주어진 qubit 상태 벡터가 ψψψψ\vert\psi\rangle \mapsto \vert\psi\rangle\vert\psi\rangle\vert\psi\rangle처럼 양자 상태를 세 번 반복하는 것과는 같지 않다는 점에 유의하세요. 그러한 인코딩은 복제 불가능 정리(no cloning theorem)에 의해 알려지지 않은 양자 상태 ψ\vert\psi\rangle에 대해 구현될 수 없습니다.

비트 플립 오류

이제 인코딩이 수행된 후 오류가 발생한다고 가정해 봅시다. 구체적으로, XX Gate, 즉 비트 플립이 qubit 중 하나에서 발생한다고 가정합시다. 예를 들어, 가운데 qubit이 비트 플립을 겪으면, 세 qubit의 상태는 다음 상태로 변환됩니다.

α010+β101.\alpha \vert 010\rangle + \beta \vert 101\rangle.

물론, 이것이 발생할 수 있는 유일한 종류의 오류는 아니며, 오류가 완벽하고 유니타리한 연산의 형태를 취한다는 가정에 의문을 제기하는 것도 합당합니다. 이 문제들은 레슨의 마지막 절에서 다시 다룰 것이며, 지금은 이러한 형태의 오류를 가능한 오류 유형 중 하나로 볼 수 있습니다(근본적으로 중요한 것이긴 하지만).

위 상태의 수학적 표현에서 각 ket 내부에서 가운데 비트가 다르다는 것을 명확히 볼 수 있습니다. 그러나 우리가 세 qubit을 소유하고 있고 그 상태를 모른다고 가정해 봅시다. 비트 플립이 발생했을 수 있다고 의심되는 경우, 비트가 뒤집혔는지 확인하는 한 가지 방법은 표준 기저 측정을 수행하는 것입니다. 이 경우 확률 α2\vert\alpha\vert^2010010을 보고 확률 β2\vert\beta\vert^2101101을 보게 됩니다. 어느 경우든 가운데 비트가 뒤집혔다고 결론내릴 수 있지만, 불행히도 원래의 양자 상태 α0+β1\alpha\vert 0\rangle + \beta \vert 1\rangle을 잃게 됩니다. 이것이 우리가 보호하려는 상태이므로, 표준 기저로 측정하는 것은 만족스럽지 못한 선택입니다.

대신 우리가 할 수 있는 것은 다음의 양자 Circuit을 사용하여, 인코딩된 상태를 상위 세 qubit에 입력하는 것입니다. 이 Circuit은 3-qubit 인코딩의 상위 두 qubit과 하위 두 qubit의 표준 기저 상태의 패리티를 비파괴적으로 측정합니다.

3비트 반복 코드의 오류 검출 회로

최대 한 비트가 뒤집혔다는 가정 하에, 측정 결과로부터 비트 플립의 위치(또는 플립 없음)를 쉽게 추론할 수 있습니다. 특히, 다음 네 개의 Circuit 다이어그램이 설명하듯이, 측정 결과 0000은 비트 플립이 발생하지 않았음을 나타내고, 나머지 세 가지 가능성은 어느 qubit에서 비트 플립이 발생했는지를 나타냅니다.

3비트 반복 코드의 오류 검출 (오류 없음)

3비트 반복 코드의 오류 검출 (qubit 0의 오류)

3비트 반복 코드의 오류 검출 (qubit 1의 오류)

3비트 반복 코드의 오류 검출 (qubit 2의 오류)

결정적으로, 이 모든 경우에 상위 세 qubit의 상태는 붕괴하지 않으며, 이는 비트 플립 오류가 발생한 경우 단순히 동일한 비트 플립을 XX Gate로 다시 적용하여 정정할 수 있게 해줍니다. 다음 표는 최대 하나의 비트 플립으로부터 얻는 상태, 측정 결과(오류 정정의 맥락에서 신드롬이라 불림), 그리고 원래 인코딩으로 되돌리기 위해 필요한 정정을 요약합니다.

상태신드롬정정
α000+β111\alpha\vert 000\rangle + \beta \vert 111\rangle0000III\mathbb{I}\otimes\mathbb{I}\otimes\mathbb{I}
α001+β110\alpha\vert 001\rangle + \beta \vert 110\rangle0101IIX\mathbb{I}\otimes\mathbb{I}\otimes X
α010+β101\alpha\vert 010\rangle + \beta \vert 101\rangle1111IXI\mathbb{I}\otimes X\otimes\mathbb{I}
α100+β011\alpha\vert 100\rangle + \beta \vert 011\rangle1010XIIX\otimes\mathbb{I}\otimes\mathbb{I}

다시 한번 말하지만, 우리는 최대 하나의 비트 플립이 발생한 가능성만 고려하고 있습니다. 두 개 또는 세 개의 비트 플립이 발생하면 이것은 올바르게 작동하지 않을 것이며, 비트 플립 외에 다른 가능한 오류는 아직 고려하지 않았습니다.

위상 플립 오류

양자 환경에서는 비트 플립 오류만 걱정할 필요가 있는 것이 아닙니다. 예를 들어, ZZ Gate로 설명되는 위상 플립 오류도 걱정해야 합니다. 비트 플립 오류와 마찬가지로, 위상 플립 오류는 qubit에 영향을 미칠 수 있는 또 다른 가능한 오류로 생각할 수 있습니다.

그러나 레슨의 마지막 절(양자 오류 정정 코드에 대한 이른바 오류의 이산화)에서 보게 되겠지만, 비트 플립 오류와 위상 플립 오류에 초점을 맞추는 것은 충분히 정당화됩니다. 구체적으로, 비트 플립 오류, 위상 플립 오류, 또는 두 오류를 동시에 정정할 수 있는 능력은 자동으로 단일 qubit에 대한 임의의 양자 오류를 정정할 수 있는 능력을 의미합니다.

불행히도 3-비트 반복 코드는 위상 플립으로부터 전혀 보호하지 못합니다. 예를 들어, qubit 상태 α0+β1\alpha\vert 0\rangle + \beta\vert 1\rangle이 3-비트 반복 코드로 인코딩되고 가운데 qubit에서 위상 플립 오류가 발생한다고 가정해 봅시다. 그 결과는 다음 상태가 됩니다.

(IZI)(α000+β111)=α000β111,(\mathbb{I} \otimes Z \otimes \mathbb{I}) ( \alpha \vert 000\rangle + \beta \vert 111\rangle) = \alpha \vert 000\rangle - \beta \vert 111\rangle,

이는 정확히 qubit 상태 α0β1\alpha\vert 0\rangle - \beta\vert 1\rangle을 인코딩했을 때 얻는 상태와 같습니다. 실제로 인코딩의 세 qubit 중 어느 하나에서 발생한 위상 플립 오류는 동일한 효과를 가지며, 이는 인코딩 이전의 원래 qubit에서 발생한 위상 플립 오류와 동등합니다. 원래의 양자 상태가 알려지지 않은 상태라는 가정 하에서, 결과 상태가 다른 qubit 상태의 완벽하게 유효한 인코딩이기 때문에 오류가 발생했음을 감지할 방법이 없습니다. 특히, 상태 α000β111\alpha \vert 000\rangle - \beta \vert 111\rangle에 대해 이전의 오류 검출 Circuit을 실행하면 반드시 신드롬 0000을 얻게 되며, 이는 오류가 발생하지 않았음을 잘못 시사합니다.

한편, 이제는 잠재적으로 위상 플립 오류를 겪을 수 있는 qubit이 하나가 아닌 세 개입니다. 따라서 각 qubit에 대해 독립적으로 어떤 0이 아닌 확률 pp로 위상 플립 오류가 발생한다고 가정하는 상황(비트 플립이 아닌 위상 플립에 대한 이진 대칭 채널과 유사함)에서, 이 코드는 작은 pp 값에 대해 실제로 디코딩 후 위상 플립 오류의 가능성을 증가시킵니다. 더 정확히 말하면, 인코딩의 세 qubit에 대해 홀수 번의 위상 플립 오류가 발생할 때마다 디코딩 후 원래 qubit에 위상 플립 오류가 나타나며, 이는 다음 확률로 발생합니다.

3p(1p)2+p3.3 p (1 - p)^2 + p^3.

이 값은 0<p<1/20<p<1/2일 때 pp보다 크므로, 이 범위의 pp 값에 대해 코드는 위상 플립 오류의 확률을 증가시킵니다.

위상 플립 오류를 위한 수정된 반복 코드

3-비트 반복 코드가 위상 플립 오류에 완전히 무감각하다는 점을 관찰했으며, 따라서 이러한 유형의 오류를 다루는 데 큰 도움이 되지 않는 것 같습니다. 그러나 3-비트 반복 코드를 간단한 방식으로 수정하여 위상 플립 오류를 검출하도록 할 수 있습니다. 이 수정은 코드를 비트 플립 오류에 무감각하게 만들지만, 다음 절에서 볼 수 있듯이, 3-비트 반복 코드와 이 수정된 버전을 결합하여 비트 플립과 위상 플립 오류를 모두 정정할 수 있는 Shor 코드를 얻을 수 있습니다.

위에서 설명한 인코딩 Circuit의 수정된 버전은 다음과 같으며, 이제 위상 플립 오류를 검출할 수 있습니다. 수정은 매우 간단합니다. 두 개의 controlled-NOT Gate를 수행한 후 각 qubit에 Hadamard Gate를 적용하는 것뿐입니다.

3비트 반복 코드의 수정된 인코딩 회로

Hadamard Gate는 0\vert 0\rangle 상태를 +\vert + \rangle 상태로, 1\vert 1\rangle 상태를 \vert - \rangle 상태로 변환하므로, 순 효과는 단일 qubit 상태 α0+β1\alpha\vert 0\rangle + \beta \vert 1\rangle이 다음과 같이 인코딩되는 것입니다.

α++++β\alpha \vert {+}\,{+}\,{+} \rangle + \beta \vert {-}\,{-}\,{-} \rangle

여기서 +++=+++\vert {+}\,{+}\,{+} \rangle = \vert + \rangle \otimes \vert + \rangle \otimes\vert + \rangle이고 =\vert {-}\,{-}\,{-} \rangle = \vert - \rangle \otimes \vert - \rangle \otimes\vert - \rangle입니다.

위상 플립 오류, 즉 동등하게 ZZ Gate는 +\vert + \rangle 상태와 \vert - \rangle 상태 사이를 뒤집으므로, 이 인코딩은 위상 플립 오류를 검출(및 정정)하는 데 유용할 것입니다. 구체적으로, 이전의 오류 검출 Circuit을 다음과 같이 수정할 수 있습니다.

3비트 반복 코드의 위상 오류 검출 회로

말로 설명하면, 이전 Circuit을 가져와서 상위 세 qubit의 처음과 끝에 Hadamard Gate를 추가하는 것뿐입니다. 아이디어는 처음 세 개의 Hadamard Gate가 +\vert + \rangle\vert - \rangle 상태를 다시 0\vert 0\rangle1\vert 1\rangle 상태로 변환하고, 이전과 동일한 패리티 검사가 이루어진 다음, 두 번째 층의 Hadamard Gate가 상태를 다시 +\vert + \rangle\vert - \rangle 상태로 변환하여 인코딩을 복원한다는 것입니다. 향후 참조를 위해, 이 위상 플립 검출 Circuit을 다음과 같이 단순화할 수 있음을 관찰해 둡시다.

단순화된 위상 오류 검출 회로

다음 네 개의 Circuit 다이어그램은 인코딩 단계와 오류 검출 단계를 포함한 수정된 3-비트 반복 코드의 버전이 최대 하나의 위상 플립 오류가 발생할 때 어떻게 작동하는지를 설명합니다. 이 동작은 비트 플립에 대한 일반적인 3-비트 반복 코드와 유사합니다.

수정된 3비트 반복 코드의 위상 플립 오류 검출 (오류 없음)

수정된 3비트 반복 코드의 위상 플립 오류 검출 (qubit 0의 오류)

수정된 3비트 반복 코드의 위상 플립 오류 검출 (qubit 1의 오류)

수정된 3비트 반복 코드의 위상 플립 오류 검출 (qubit 2의 오류)

다음은 위의 표와 유사하지만, 이번에는 최대 하나의 위상 플립 오류의 가능성을 고려한 표입니다.

상태신드롬정정
α++++β\alpha\vert {+}\,{+}\,{+} \rangle + \beta \vert {-}\,{-}\,{-}\rangle0000III\mathbb{I}\otimes\mathbb{I}\otimes\mathbb{I}
α+++β+\alpha\vert {+}\,{+}\,{-}\rangle + \beta \vert {-}\,{-}\,{+}\rangle0101IIZ\mathbb{I}\otimes\mathbb{I}\otimes Z
α+++β+\alpha\vert {+}\,{-}\,{+}\rangle + \beta \vert {-}\,{+}\,{-}\rangle1111IZI\mathbb{I}\otimes Z\otimes\mathbb{I}
α+++β+\alpha\vert {-}\,{+}\,{+} \rangle + \beta \vert {+}\,{-}\,{-}\rangle1010ZIIZ\otimes\mathbb{I}\otimes\mathbb{I}

불행히도, 3-비트 반복 코드의 이 수정된 버전은 이제 비트 플립 오류를 정정할 수 없습니다. 그러나 모든 것을 잃은 것은 아닙니다. 앞서 시사했듯이, 우리는 방금 본 두 코드를 비트 플립과 위상 플립 오류, 그리고 실제로 단일 qubit의 어떤 오류라도 정정할 수 있는 하나의 코드, 즉 9-Qubit Shor 코드로 결합할 수 있게 될 것입니다.