주 콘텐츠로 건너뛰기

토릭 코드

다음으로 1997년 Alexei Kitaev가 발견한 *토릭 코드(toric code)*라고 알려진 특정 CSS 코드에 대해 살펴보겠습니다. 사실 토릭 코드는 단일 코드가 아니라 2 이상의 각 양의 정수에 대해 하나씩 정의되는 코드 패밀리입니다. 이 코드들은 몇 가지 중요한 특성을 가지고 있습니다:

  • 안정화기 생성원의 가중치가 낮습니다. 특히 모두 가중치 4를 가집니다. 코딩 이론 용어로 말하면, 토릭 코드는 양자 저밀도 패리티 검사 코드, 즉 양자 LDPC 코드의 예입니다(여기서 낮다는 것은 4를 의미합니다). 각 안정화기 생성원 측정이 너무 많은 Qubit을 포함하지 않아도 된다는 점에서 유용합니다.

  • 토릭 코드는 *기하학적 국소성(geometric locality)*을 가집니다. 이는 안정화기 생성원의 가중치가 낮을 뿐만 아니라, 각 안정화기 생성원 측정이 서로 인접한 Qubit만 포함하도록 Qubit을 공간적으로 배치할 수 있다는 것을 의미합니다. 원칙적으로 이는 공간적으로 멀리 떨어진 Qubit을 포함하는 측정보다 구현이 더 쉽습니다.

  • 토릭 코드 패밀리의 구성원들은 점점 더 *큰 거리(large distance)*를 가지며, 비교적 높은 오류율을 허용할 수 있습니다.

Toric code 설명

L2L\geq 2를 양의 정수라 하고, 이른바 *주기적 경계(periodic boundaries)*를 가진 L×LL\times L 격자를 고려해보겠습니다. 예를 들어, 다음 그림은 L=9L=9인 경우의 L×LL\times L 격자를 나타냅니다.

주기적 경계를 가진 9x9 격자

오른쪽과 아래쪽의 선들이 점선임을 주목하세요. 이는 오른쪽의 점선이 맨 왼쪽의 선과 동일한 선임을 나타내며, 마찬가지로 아래쪽의 점선은 맨 위쪽의 선과 같은 선입니다.

이러한 구성을 물리적으로 실현하려면 3차원이 필요합니다. 특히, 왼쪽과 오른쪽 면을 먼저 맞춰 격자를 원통 모양으로 만든 다음, 원통을 구부려 격자의 위쪽과 아래쪽 가장자리였던 두 원이 만나도록 할 수 있습니다. 또는 위아래를 먼저 맞추고 양 옆을 맞출 수도 있습니다. 두 방법 모두 동일한 결과를 만들며, 이 논의에서는 어느 쪽을 선택하든 상관없습니다.

이렇게 만들어지는 것은 토러스(torus), 즉 도넛 모양입니다(하지만 속이 꽉 찬 것이 아니므로, 타이어의 튜브를 떠올리는 것이 더 적합한 이미지입니다. 격자는 토러스의 표면이 됩니다). "토릭 코드"라는 이름이 여기서 유래합니다.

토러스로 감긴 9x9 격자

이처럼 토러스 위에서 격자의 인접 점들 사이를 이동하는 방법은, 화면 위쪽으로 나가면 아래쪽에서 다시 나타나고 좌우 가장자리도 마찬가지인 고전 비디오 게임을 해본 분들에게 익숙할 것입니다. 우리는 3차원 공간의 토러스에 대해 구체적으로 이야기하는 대신, 이 주기적 경계를 가진 격자를 이런 방식으로 이해하겠습니다.

다음으로, Qubit은 이 격자의 간선(edges) 위에 배치됩니다. 아래 그림에서 Qubit은 파란색 실선 원으로 표시됩니다.

9x9 주기적 격자의 간선 위의 Qubit

점선 위에 배치된 Qubit은 실선 원으로 표시되지 않는데, 이는 격자의 최상단 및 최좌단 선에 이미 표시되어 있기 때문입니다. 전체적으로 2L22L^2개의 Qubit이 있습니다: 수평선 위에 L2L^2개, 수직선 위에 L2L^2개입니다.

토릭 코드 자체를 설명하려면 안정화기 생성원을 설명해야 합니다:

  • 격자의 선들로 형성되는 각 *타일(tile)*에 대해 하나의 ZZ 안정화기 생성원이 있으며, 해당 타일에 접하는 네 개의 Qubit에 ZZ 행렬을 텐서하고 나머지 모든 Qubit에 단위 행렬을 텐서하여 얻습니다.

  • 격자의 선들로 형성되는 각 *꼭짓점(vertex)*에 대해 하나의 XX 안정화기 생성원이 있으며, 해당 꼭짓점에 인접한 네 개의 Qubit에 XX 행렬을 텐서하고 나머지 모든 Qubit에 단위 행렬을 텐서하여 얻습니다.

두 경우 모두 가중치 4의 파울리 연산을 얻습니다. 이러한 안정화기 생성원들을 개별적으로 나타내면 다음과 같습니다.

토릭 코드의 안정화기 생성원 유형

다음은 격자 자체의 맥락에서 안정화기 생성원의 몇 가지 예를 보여주는 그림입니다. 주기적 경계를 감싸는 안정화기 생성원들도 포함되어 있음을 주목하세요. 주기적 경계를 감싸는 이러한 생성원들은 특별하거나 그렇지 않은 생성원들과 어떤 식으로도 구별되지 않습니다.

격자 위의 안정화기 생성원 예시

이것이 유효한 안정화기 코드가 되려면 안정화기 생성원들이 서로 교환 가능해야 합니다. 평소와 마찬가지로, ZZ 안정화기 생성원들은 ZZ가 자기 자신과 교환 가능하고 단위 행렬은 모든 것과 교환 가능하기 때문에 서로 교환 가능하며, XX 안정화기 생성원들도 마찬가지입니다. ZZXX 안정화기 생성원들이 서로소인 Qubit 집합에 비자명하게 작용할 때는 명백히 교환 가능합니다(이전 그림의 예처럼). 나머지 가능성은 ZZ 안정화기 생성원과 XX 안정화기 생성원이 비자명하게 작용하는 Qubit에서 겹치는 경우인데, 이런 일이 발생할 때마다 두 생성원은 항상 두 개의 Qubit에서 겹칩니다(다음 그림처럼).

토릭 코드의 겹치는 안정화기 생성원

따라서 이런 두 안정화기 생성원은 ZZZ\otimes ZXXX\otimes X가 교환 가능한 것과 마찬가지로 교환 가능합니다. 따라서 안정화기 생성원들은 모두 서로 교환 가능합니다.

안정화기 코드의 안정화기 생성원에 필요한 두 번째 조건은 최소 생성 집합을 이루어야 한다는 것입니다. 이 조건은 실제로 이 모음에서 충족되지 않습니다: 모든 ZZ 안정화기 생성원을 곱하면 항등 연산이 되고, XX 안정화기 생성원들도 마찬가지입니다. 따라서 어떤 ZZ 안정화기 생성원이든 나머지 모든 것들의 곱으로 표현할 수 있으며, 마찬가지로 어떤 XX 안정화기 생성원이든 나머지 XX 안정화기 생성원들의 곱으로 표현할 수 있습니다. 하지만 ZZ 안정화기 생성원 중 하나와 XX 안정화기 생성원 중 하나를 제거하면 최소 생성 집합을 얻을 수 있습니다.

명확히 말씀드리자면, 우리는 실제로 모든 안정화기 생성원을 동등하게 중요시하며, 엄밀한 의미에서 각 유형의 안정화기 생성원 하나를 선택하여 제거할 필요는 없습니다. 하지만 코드를 분석하기 위해, 특히 생성원의 수를 셀 때, 각 유형의 안정화기 생성원 하나가 제거되었다고 가정하여 최소 생성 집합을 얻을 수 있으며, 이렇게 제거된 생성원들의 결과(이것들을 관측량으로 생각할 때)는 같은 유형의 다른 모든 안정화기 생성원 관측량의 결과로부터 항상 추론할 수 있다는 점을 기억해야 합니다.

이렇게 하면 각 유형별 L21L^2 - 1개의 안정화기 생성원, 즉 (가상의) 최소 생성 집합에서 총 2L222L^2 - 2개가 남습니다. 총 2L22L^2개의 Qubit이 있으므로, 토릭 코드는 2L22(L21)=22L^2 - 2 (L^2 - 1) = 2개의 Qubit을 인코딩합니다.

안정화기 생성원에 필요한 마지막 조건은 적어도 하나의 양자 상태 벡터가 모든 안정화기 생성원에 의해 고정되어야 한다는 것입니다. 코드 분석을 진행하면서 이것이 사실임을 확인하게 되겠지만, 안정화기 생성원으로부터 모든 2L22L^2개의 Qubit에 대해 1-1을 곱한 단위 행렬을 생성할 방법이 없다는 것도 추론할 수 있습니다.

오류 감지

토릭 코드는 간단하고 우아한 설명을 가지고 있지만, 양자 오류 수정 특성은 처음 보면 전혀 명확하지 않을 수 있습니다. 알고 보면 이것은 놀라운 코드입니다! 왜 그리고 어떻게 작동하는지 이해하기 위해, 다양한 오류와 그것들이 생성하는 증후군(syndrome)을 살펴보겠습니다.

토릭 코드는 CSS 코드입니다. 우리의 모든 안정화기 생성원이 ZZ 또는 XX 안정화기 생성원이기 때문입니다. 이는 XX 오류와 ZZ 오류를 별도로 감지(그리고 가능하다면 수정)할 수 있음을 의미합니다. 사실, ZZ 안정화기 생성원과 XX 안정화기 생성원 사이에는 간단한 대칭이 있어 XX 오류와 ZZ 오류를 본질적으로 같은 방식으로 분석할 수 있습니다. 따라서 ZZ 안정화기 생성원에 의해 감지될 수 있는 XX 오류에 초점을 맞추겠습니다. 하지만 다음의 모든 논의는 XX 오류에서 ZZ 오류로 변환될 수 있으며, ZZ 오류는 유사하게 XX 안정화기 생성원에 의해 감지됩니다.

다음 다이어그램은 단일 Qubit에 대한 XX 오류의 효과를 나타냅니다. 여기서 가정은 우리의 2L22L^2개의 Qubit이 이전에 토릭 코드의 코드 공간에 포함된 상태에 있었으며, 모든 안정화기 생성원 측정이 +1+1을 출력했다는 것입니다. ZZ 안정화기 생성원은 XX 오류를 감지하며, 그림의 각 타일마다 하나의 그러한 안정화기 생성원이 있으므로, 해당 타일의 색상으로 해당 안정화기 생성원의 측정 결과를 나타낼 수 있습니다: +1+1 결과는 흰색 타일로, 1-1 결과는 회색 타일로 표시됩니다. Qubit 중 하나에 비트 플립 오류가 발생하면, 영향받은 Qubit에 접하는 두 타일에 해당하는 안정화기 생성원 측정이 1-1을 출력하게 됩니다.

토릭 코드에서 단일 비트 플립 오류의 효과

ZZ 안정화기 생성원과 그 동작을 고려하면 직관적으로 이해됩니다. 본질적으로 각 ZZ 안정화기 생성원은 해당 타일에 접하는 네 개의 Qubit의 (표준 기저에 대한) 패리티를 측정합니다. 따라서 +1+1 결과는 이 네 개의 Qubit에 XX 오류가 없었다는 것을 나타내는 것이 아니라, 이 Qubit들에 짝수 개의 XX 오류가 발생했음을 나타내며, 1-1 결과는 홀수 개의 XX 오류가 발생했음을 나타냅니다. 따라서 단일 XX 오류는 그것이 접하는 두 타일 모두의 네 비트의 패리티를 뒤집어 안정화기 생성원 측정이 1-1을 출력하게 합니다.

다음으로 여러 개의 XX 오류를 도입하여 어떤 일이 발생하는지 살펴보겠습니다. 특히, 인접한 XX 오류들의 체인을 고려할 것입니다. 두 XX 오류는 같은 타일에 접하는 Qubit에 영향을 미칠 때 인접합니다.

토릭 코드에서 비트 플립 오류 체인의 효과

이 경우, 체인 양 끝점의 두 ZZ 안정화기 생성원 모두 1-1 결과를 줍니다. 해당하는 두 타일에 홀수 개의 XX 오류가 발생했기 때문입니다. 반면, 체인에 접하지만 끝점이 아닌 타일을 포함하여 다른 모든 ZZ 안정화기 생성원은 +1+1 결과를 줍니다. 해당 타일에 접하는 Qubit에 짝수 개의 XX 오류가 발생했기 때문입니다.

따라서 끝점을 가진 XX 오류 체인이 있는 한, 토릭 코드는 오류가 발생했음을 감지하여 체인 끝점에 해당하는 ZZ 안정화기 생성원에 대해 1-1 측정 결과를 생성합니다. 실제 오류 체인은 드러나지 않고, 오직 끝점만 드러납니다! 이것은 괜찮습니다. 다음 절에서 XX 오류를 수정하기 위해 어떤 Qubit이 영향을 받았는지 정확히 알 필요가 없다는 것을 확인하겠습니다. (토릭 코드는 고도로 퇴화된(degenerate) 코드의 예시입니다. 일반적으로 수정하는 오류를 고유하게 식별하지 못하는 의미에서.)

그러나 인접한 XX 오류들의 체인이 끝점을 갖지 않을 수도 있습니다. 즉, 오류 체인이 다음 그림처럼 닫힌 루프를 형성할 수 있습니다.

토릭 코드에서 비트 플립 오류의 닫힌 루프

이 경우, 모든 타일에 짝수 개의 XX 오류가 발생했으므로 모든 안정화기 생성원 측정은 +1+1 결과를 냅니다. 따라서 인접한 XX 오류들의 닫힌 루프는 코드에 의해 감지되지 않습니다.

이것은 실망스러워 보일 수 있습니다. 닫힌 루프를 형성하는 데 XX 오류 4개만 필요하기 때문입니다(거리 4 코드보다 훨씬 더 나은 것을 기대하고 있습니다). 하지만 이전 그림에 나타난 형태의 XX 오류의 닫힌 루프는 실제로 오류가 아닙니다. 안정화기에 포함되어 있기 때문입니다! ZZ 안정화기 생성원 외에도, 격자의 각 꼭짓점에 대한 XX 안정화기 생성원도 있다는 점을 기억하세요. 인접한 XX 안정화기 생성원들을 곱하면 XX 연산의 닫힌 루프를 얻게 됩니다. 예를 들어, 이전 그림의 닫힌 루프는 다음 그림에 표시된 XX 안정화기 생성원들을 곱하여 얻을 수 있습니다.

X 안정화기 생성원에 의해 생성된 비트 플립 오류의 닫힌 루프

그러나 이것이 우리가 가질 수 있는 XX 오류의 닫힌 루프의 유일한 유형은 아닙니다. 모든 XX 오류의 닫힌 루프가 안정화기에 포함되는 것은 아닙니다. 특히, 루프의 다른 유형들은 다음과 같이 특성화할 수 있습니다.

  1. 모든 수평 Qubit 선과 모든 수직 Qubit 선에서 짝수 개의 XX 오류를 가진 XX 오류의 닫힌 루프. (위에 나타난 예가 이 범주에 해당합니다.) 이 형태의 루프는 항상 안정화기에 포함됩니다. XX 안정화기 생성원을 곱함으로써 효과적으로 아무것도 없는 상태로 줄일 수 있기 때문입니다.

  2. 적어도 하나의 수평 Qubit 선 또는 적어도 하나의 수직 Qubit 선에서 홀수 개의 XX 오류를 가진 XX 오류의 닫힌 루프. 이 형태의 루프는 안정화기에 포함되지 않으며, 따라서 코드에 의해 감지되지 않는 비자명한 오류를 나타냅니다.

두 번째 범주에 속하는 XX 오류의 닫힌 루프의 예가 다음 다이어그램에 나와 있습니다.

안정화기에 없는 비트 플립 오류의 닫힌 루프

이러한 오류 체인은 안정화기에 포함되지 않습니다. 모든 XX 안정화기 생성원이 모든 수평 선과 모든 수직 Qubit 선에 짝수 개의 XX 연산을 배치하기 때문입니다. 따라서 이것은 코드가 감지하지 못하는 비자명한 오류의 실제 예입니다.

핵심은 두 번째 종류의 루프를 형성하는 유일한 방법이 토러스를 한 바퀴 돌아야 한다는 것입니다. 즉, 토러스의 가운데 구멍 주위를 돌거나, 그 안을 통과하거나, 또는 두 가지 모두를 해야 합니다. 직관적으로 이런 XX 오류 체인은 토러스의 위상(topology)이 이를 금지하기 때문에 XX 안정화기 생성원을 곱해서 아무것도 없는 상태로 줄일 수 없습니다. 토릭 코드가 이러한 이유로 위상적 양자 오류 수정 코드로 분류되기도 합니다. 이러한 루프의 최소 길이는 LL이며, 따라서 이것이 토릭 코드의 거리입니다: 길이가 LL 미만인 XX 오류의 닫힌 루프는 첫 번째 범주에 속해야 하므로 안정화기에 포함됩니다. 그리고 끝점을 가진 XX 오류 체인은 코드에 의해 감지됩니다.

토릭 코드가 2L22L^2개의 Qubit을 사용하여 22개의 Qubit을 인코딩하고 거리가 LL이라는 점을 감안하면, 이것은 [[2L2,2,L]][[2L^2,2,L]] 안정화기 코드임을 알 수 있습니다.

오류 수정

토릭 코드의 오류 감지에 대해 논의했으며, 이제 오류를 수정하는 방법을 간략하게 살펴보겠습니다. 토릭 코드는 CSS 코드이므로 XX 오류와 ZZ 오류를 독립적으로 감지하고 수정할 수 있습니다. XX 오류를 감지하는 ZZ 안정화기 생성원에 초점을 맞추어, XX 오류 체인을 어떻게 수정할 수 있는지 살펴보겠습니다. (ZZ 오류는 대칭적인 방식으로 수정됩니다.)

ZZ 안정화기 생성원이 측정될 때 (+1,,+1)(+1,\ldots,+1) 증후군과 다른 증후군이 나타나면, 1-1 결과는 하나 이상의 XX 오류 체인의 끝점을 드러냅니다. 1-1 결과들을 짝지어 그 사이에 XX 수정 체인을 형성함으로써 이러한 오류를 수정하려고 할 수 있습니다. 이때 수정이 이루어지는 최단 경로를 선택하는 것이 합리적입니다.

예를 들어, 다음 다이어그램은 마젠타 선과 원으로 표시된 XX 오류 체인으로 인한 두 개의 1-1 결과(회색 타일로 표시)를 가진 증후군을 나타냅니다. 이미 언급했듯이, 체인 자체는 증후군에 의해 드러나지 않으며, 오직 끝점만 보입니다.

최단 경로로 X 오류 수정

이 오류 체인을 수정하기 위해, 1-1 측정 결과 사이의 최단 경로가 선택되고, 이 경로를 따라 Qubit에 XX Gate가 수정으로 적용됩니다(그림에서 노란색으로 표시됨). 수정이 실제 오류 체인과 일치하지 않을 수 있지만, 오류와 수정이 합쳐져 코드의 안정화기에 포함된 XX 연산의 닫힌 루프를 형성합니다. 따라서 이 상황에서 수정은 성공적이며, 오류와 수정의 결합 효과는 인코딩된 상태에 아무런 영향을 미치지 않습니다.

이 전략이 항상 성공하는 것은 아닙니다. 예를 들어, 이전 그림과 동일한 증후군에 대한 다른 설명이 다음 그림에 나와 있습니다.

수정으로 논리적 오류 완성

이번에는, 이전과 동일한 수정 체인이 이 오류 체인을 수정하지 못합니다. 오류와 수정의 결합 효과가 토러스를 감싸는 XX 연산의 닫힌 루프를 만들어, 코드 공간에 비자명한 효과를 미치기 때문입니다. 따라서 두 개의 1-1 증후군 측정 결과 사이에서 XX 수정의 최단 경로를 선택하는 방금 설명한 전략이 이 증후군을 일으킨 오류를 제대로 수정한다는 보장은 없습니다.

노이즈 모델에 따라 더 가능성이 높은 것은, 다음 그림이 시사하는 것처럼 두 개 이상의 1-1 항목을 가진 증후군이 측정되는 경우입니다.

다중 수정 체인

이 경우, 다양한 수정 전략이 알려져 있습니다. 자연스러운 전략 중 하나는 1-1 측정 결과들을 짝 지어 쌍들을 연결하는 최단 경로를 따라 수정을 수행하는 것입니다(그림에서 노란색으로 표시). 특히, 1-1 측정 결과들 사이의 *최소 가중치 완전 매칭(minimum-weight perfect matching)*을 계산한 다음, 쌍들을 XX 수정의 최단 경로로 연결할 수 있습니다. 최소 가중치 완전 매칭의 계산은 1960년대에 Edmonds가 발견한 *블로섬 알고리즘(blossom algorithm)*이라는 고전 알고리즘으로 효율적으로 수행할 수 있습니다.

이 접근법은 가장 일반적으로 연구되는 노이즈 모델에 대해 일반적으로 최적은 아니지만, 수치 시뮬레이션에 기반하면 X,X, Y,Y, ZZ가 동등하게 가능한 독립 파울리 오류를 가정할 때 약 10%의 노이즈율 이하에서 실제로 매우 잘 작동합니다. LL을 증가시켜도 코드가 도움이 되기 시작하는 손익분기점에는 큰 영향을 미치지 않지만, 오류율이 손익분기점을 지나 감소함에 따라 논리적 오류 확률이 더 빠르게 감소하게 됩니다.