2026년 7월 3일 금요일
튜토리얼 목록
중급양자컴퓨팅

양자 오류 정정 입문: 3큐비트 반복 코드

양자 컴퓨터는 환경과의 상호작용으로 인해 필연적으로 오류가 발생한다. 3큐비트 반복 코드는 가장 단순한 양자 오류 정정 코드로, 하나의 논리 큐비트를 세 개의 물리 큐비트로 인코딩하여 비트 반전 오류를 탐지하고 복원하는 원리를 보여준다. 이 챕터에서는 코드의 구조, 신드롬 측정, 오류 복원 과정을 단계적으로 살펴본다.

개념 소개

양자 계산이 실용적이려면 오류에 강해야 한다. 고전 컴퓨터에서는 같은 비트를 여러 번 복사하여 다수결 원리로 오류를 수정한다. 예를 들어 0000으로, 1111로 저장하면, 하나의 비트가 뒤집혀도 나머지 두 비트를 보고 올바른 값을 복원할 수 있다.

양자 세계에서는 두 가지 근본적인 장벽이 존재한다.

  1. 복제 불가 정리(no-cloning theorem): 임의의 미지 양자 상태 를 완전히 복사하는 것은 불가능하다.
  2. 측정 붕괴: 큐비트를 직접 측정하면 중첩 상태가 파괴된다.

그럼에도 불구하고 양자 오류 정정은 가능하다. 핵심은 상태를 복사하지 않고, 오류의 종류(신드롬)만 간접 측정하는 것이다.


핵심 원리

인코딩

3큐비트 반복 코드는 비트 반전 오류( 오류)만을 다룬다. 논리 큐비트 상태를 다음과 같이 세 물리 큐비트로 인코딩한다.

임의의 논리 상태 는 아래와 같이 인코딩된다.

이 인코딩은 CNOT 게이트 두 개로 구현된다.

|ψ⟩ ──●──●──
|0⟩ ──⊕──|──
|0⟩ ──|──⊕──

오류 모델

하나의 큐비트에 비트 반전 오류 가 작용하면 세 가지 경우가 발생한다.

오류 상태 변화 예시
큐비트 1 오류
큐비트 2 오류
큐비트 3 오류

신드롬 측정

오류를 탐지하기 위해 두 개의 패리티 연산자를 보조 큐비트에 간접 측정한다.

각 연산자의 측정값(±1)은 어떤 큐비트에 오류가 있는지 알려주는 신드롬이 된다.

진단
오류 없음
큐비트 1 오류
큐비트 2 오류
큐비트 3 오류

핵심은 가 논리 정보()를 전혀 노출하지 않는다는 점이다. 이들은 오류의 위치만 알려준다.

오류 복원

신드롬에 따라 해당 큐비트에 게이트를 적용하면 원래 상태로 복원된다.


예시·응용

아래 Qiskit 코드는 3큐비트 반복 코드를 구현하고, 큐비트 0에 비트 반전 오류를 삽입한 뒤 신드롬을 측정한다.

from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister

# 레지스터 정의
data = QuantumRegister(3, 'data')
ancilla = QuantumRegister(2, 'anc')
syndrome = ClassicalRegister(2, 'syn')

qc = QuantumCircuit(data, ancilla, syndrome)

# 인코딩: |ψ⟩ = |+⟩ 준비 후 CNOT으로 확산
qc.h(data[0])
qc.cx(data[0], data[1])
qc.cx(data[0], data[2])

# 오류 삽입: 큐비트 0에 비트 반전
qc.x(data[0])

# 신드롬 측정 (Z1Z2, Z2Z3)
qc.cx(data[0], ancilla[0])
qc.cx(data[1], ancilla[0])
qc.cx(data[1], ancilla[1])
qc.cx(data[2], ancilla[1])
qc.measure(ancilla, syndrome)

# 신드롬에 따른 복원 (고전 제어)
with qc.if_test((syndrome, 0b01)):
    qc.x(data[0])
with qc.if_test((syndrome, 0b11)):
    qc.x(data[1])
with qc.if_test((syndrome, 0b10)):
    qc.x(data[2])

print(qc.draw('text'))

한계: 3큐비트 반복 코드는 위상 반전 오류( 오류)를 정정하지 못한다. 또한 두 개 이상의 동시 오류는 다수결 논리가 잘못 판단할 수 있다. 이 한계를 극복한 것이 **Shor 코드(9큐비트)**와 스태빌라이저 코드 계열이다.


정리

3큐비트 반복 코드는 양자 오류 정정의 세 가지 핵심 아이디어를 보여준다. 첫째, 논리 정보를 얽힘 상태로 분산 인코딩한다. 둘째, 상태를 직접 측정하지 않고 패리티(신드롬)만 추출한다. 셋째, 신드롬 결과에 따라 능동적으로 오류를 되돌린다. 이 세 원리는 더 복잡한 오류 정정 코드에서도 동일하게 작동하는 기반이 된다.

연습문제

  1. Q1.오류가 없는 상태 $\alpha|000\rangle + \beta|111\rangle$에 $M_1 = Z_1Z_2$를 적용하면 어떤 고유값이 측정되는가? 그 이유를 설명하라.

    힌트 보기

    $Z|0\rangle = +|0\rangle$, $Z|1\rangle = -|1\rangle$ 임을 이용하라.

    해설 보기

    $Z_1Z_2$를 $|000\rangle$에 적용하면 $(+1)(+1)|000\rangle = +|000\rangle$, $|111\rangle$에 적용하면 $(-1)(-1)|111\rangle = +|111\rangle$이다. 두 기저 상태 모두 고유값 $+1$을 가지므로, 측정 결과는 항상 $+1$이다. 이는 두 큐비트 간 패리티가 일치함을 의미하며, 오류가 없음을 나타낸다.

  2. Q2.3큐비트 반복 코드로 위상 반전 오류 $Z$를 정정할 수 없는 이유를 논리적으로 서술하라.

    해설 보기

    위상 반전 오류 $Z$는 $|0\rangle \to |0\rangle$, $|1\rangle \to -|1\rangle$로 작용한다. 인코딩 상태 $\alpha|000\rangle + \beta|111\rangle$에 $Z_1$이 가해지면 $\alpha|000\rangle - \beta|111\rangle$이 된다. 이 상태는 $|000\rangle$과 $|111\rangle$의 상대 위상만 바뀐 것으로, $Z_1Z_2$나 $Z_2Z_3$ 패리티 측정으로는 감지되지 않는다. 위상 오류를 탐지하려면 Hadamard 기저에서의 패리티 측정이 추가로 필요하며, 이것이 Shor 코드가 두 종류의 반복 구조를 결합하는 이유다.

  3. Q3.두 큐비트(큐비트 1과 큐비트 2)에 동시에 비트 반전 오류가 발생했을 때 신드롬을 계산하고, 다수결 복원이 올바른지 판단하라.

    해설 보기

    $M_1 = Z_1Z_2$: 두 큐비트 모두 뒤집혔으므로 $(-1)(-1) = +1$. $M_2 = Z_2Z_3$: 큐비트 2만 뒤집혔으므로 $(-1)(+1) = -1$. 신드롬 $(+1, -1)$은 표에 따라 "큐비트 3 오류"로 해석된다. 복원 시 큐비트 3에 $X$를 적용하면, 실제로는 큐비트 1·2가 뒤집힌 상태에 큐비트 3까지 추가로 뒤집히므로 세 큐비트 모두 잘못된 상태가 된다. 즉, 두 큐비트 이상의 동시 오류는 이 코드로 정정할 수 없으며, 이는 코드의 거리(code distance)가 3임을 의미한다.

관련 용어

이 챕터는 Claude (claude-sonnet-4-6)가 작성했습니다. · 발행 2026. 4. 21.