Yangja Wiki / 회로 모델

회로 그리는 규칙

양자 회로는 행렬곱을 그림으로 적은 것입니다. wire는 큐비트의 시간 흐름이고, 게이트 박스는 상태벡터에 곱하는 유니터리입니다.

시간 방향과 wire

대부분의 회로도에서 시간은 왼쪽에서 오른쪽으로 흐릅니다. 같은 wire 위의 게이트는 순서대로 적용됩니다.

$$
|\psi_{\mathrm{out}}\rangle = U_3U_2U_1|\psi_{\mathrm{in}}\rangle
$$

그림에서는 U_1이 왼쪽, U_3가 오른쪽에 있어도 수식에서는 오른쪽에서 왼쪽으로 작용한다는 점이 중요합니다.

병렬 게이트와 텐서곱

서로 다른 wire에 동시에 놓인 게이트는 텐서곱으로 묶입니다.

$$
(A\otimes B)(|\psi\rangle\otimes|\phi\rangle)
=
A|\psi\rangle\otimes B|\phi\rangle
$$

예를 들어 첫 번째 큐비트에 H, 두 번째 큐비트에 X를 적용하면 전체 연산은 H\otimes X입니다.

측정

측정 기호는 큐비트를 고전 비트로 바꾸는 경계입니다. 계산기저 측정은 상태를 |0\rangle 또는 |1\rangle로 붕괴시키고 결과를 classical register에 기록합니다.

$$
|\psi\rangle=\alpha|0\rangle+\beta|1\rangle
\quad\Rightarrow\quad
\Pr(0)=|\alpha|^2,\quad \Pr(1)=|\beta|^2
$$

측정 뒤에는 보통 더 이상 유니터리 회로가 아닙니다. 중간 측정과 feed-forward를 쓰면 회로는 classical control을 포함한 절차가 됩니다.

회로 동치

두 회로가 모든 입력 상태에 대해 같은 출력을 만들면 같은 회로로 봅니다. 즉 전체 유니터리가 같으면 됩니다.

$$
C_1 \equiv C_2
\quad\Longleftrightarrow\quad
U(C_1)=e^{i\theta}U(C_2)
$$

전역 위상 e^{i\theta}는 측정확률에 영향을 주지 않으므로 회로 동치에서 보통 무시합니다.

작은 예제

Bell 상태 회로는 회로 표기의 핵심을 모두 포함합니다. 먼저 첫 큐비트에 H를 적용하고, 그 큐비트를 control로 CX를 적용합니다.

$$
|00\rangle
\xrightarrow{H\otimes I}
{ |00\rangle+|10\rangle \over \sqrt{2}}
\xrightarrow{\mathrm{CX}}
{ |00\rangle+|11\rangle \over \sqrt{2}}
$$

이 예제는 병렬 게이트, 텐서곱, 제어 게이트, 얽힘을 모두 보여줍니다.

5큐비트 확률 계산 예제

회로를 읽을 때 최종 목표는 “각 비트열이 나올 확률이 얼마인가”를 계산하는 것입니다. 5큐비트 예제로 보겠습니다. 초기 상태를 |00000\rangle라 두고, 첫 두 큐비트에 Hadamard를 적용합니다.

$$
(H\otimes H\otimes I\otimes I\otimes I)|00000\rangle
=
{1\over2}(
|00000\rangle+|01000\rangle+|10000\rangle+|11000\rangle)
$$

이제 1번 큐비트를 control로 3번 큐비트에 CX를, 2번 큐비트를 control로 4번 큐비트에 CX를 건다고 합시다. 그러면 control이 1인 항에서 target만 뒤집힙니다.

$$
{1\over2}(
|00000\rangle+|01010\rangle+|10100\rangle+|11110\rangle)
$$

각 항의 진폭은 모두 1/2입니다. 따라서 각 비트열의 측정 확률은 진폭의 절댓값 제곱입니다.

$$
\Pr(00000)=\Pr(01010)=\Pr(10100)=\Pr(11110)
=\left|{1\over2}\right|^2={1\over4}
$$

나머지 28개 비트열은 진폭이 0이므로 확률도 0입니다. 회로가 복잡해져도 기본 원리는 같습니다. 가능한 basis state의 진폭을 따라가고, 마지막에 절댓값 제곱을 취합니다.

읽는 체크리스트

  1. wire 수가 몇 개인가?
  2. 왼쪽에서 오른쪽으로 어떤 게이트가 적용되는가?
  3. 병렬 게이트는 어떤 텐서곱인가?
  4. 측정 전에 어떤 상태가 만들어지는가?
  5. 측정 결과의 확률은 무엇인가?

회로 순서와 행렬곱 순서

양자 회로를 처음 읽을 때 가장 많이 헷갈리는 지점은 그림의 순서와 수식의 곱셈 순서가 반대로 보인다는 점입니다. 회로는 왼쪽에서 오른쪽으로 읽지만, 상태벡터에 작용하는 행렬곱은 가장 오른쪽 행렬이 먼저 작용합니다.

예를 들어 한 큐비트에 X, H, Z를 순서대로 적용하는 회로가 있다고 합시다.

$$
|\psi_{\mathrm{out}}\rangle = ZHX|\psi_{\mathrm{in}}\rangle
$$

이 식을 말로 읽으면 “먼저 X를 적용하고, 그 다음 H를 적용하고, 마지막으로 Z를 적용한다”입니다. 회로 그림의 시간 방향은 왼쪽에서 오른쪽이지만, 행렬이 상태벡터 왼쪽에 계속 붙기 때문에 최종 수식은 ZHX가 됩니다.

이 규칙은 다중 큐비트 회로에서도 그대로 유지됩니다. layer 단위로 보면 아래처럼 쓸 수 있습니다.

$$
|\psi_{\mathrm{out}}\rangle
=
L_mL_{m-1}\cdots L_2L_1|\psi_{\mathrm{in}}\rangle
$$

여기서 L_i는 같은 시간 단계에 병렬로 놓인 게이트들을 텐서곱한 전체 layer 연산입니다.

측정 기저를 바꾸는 회로

기본 측정은 보통 Z basis 측정입니다. 즉 장비는 마지막에 계산기저 |0\rangle,|1\rangle 기준으로 결과를 줍니다. 그런데 X basis로 측정하고 싶다면 측정 직전에 H를 넣으면 됩니다.

$$
\text{measure in X basis}
\quad\equiv\quad
H\text{ then measure in Z basis}
$$

왜냐하면 Hadamard가 |+\rangle|0\rangle로, |-\rangle|1\rangle로 보내기 때문입니다.

$$
H|+\rangle=|0\rangle,\qquad
H|-\rangle=|1\rangle
$$

마찬가지로 다른 basis 측정도 “측정하고 싶은 basis를 계산기저로 돌려놓는 유니터리”를 먼저 적용한 뒤 Z basis 측정을 하는 방식으로 구현합니다.

Classical control과 feed-forward

측정 결과를 고전 비트에 저장한 뒤, 그 결과에 따라 뒤의 게이트를 조건부로 실행할 수 있습니다. 이때 회로는 더 이상 하나의 순수한 유니터리 행렬로만 설명되지 않습니다. 측정으로 분기가 생기고, 각 분기마다 다른 연산이 적용됩니다.

예를 들어 측정 결과가 1이면 X를 적용하는 classical correction은 아래처럼 말할 수 있습니다.

$$
\rho \mapsto
P_0\rho P_0
+ X P_1\rho P_1 X
$$

여기서 P_0=|0\rangle\langle0|, P_1=|1\rangle\langle1|입니다. 이 표현은 측정과 조건부 보정이 합쳐진 채널로 볼 수 있습니다.

양자 텔레포테이션, 오류정정 syndrome 측정, measurement-based computation에서는 이 feed-forward가 핵심이 됩니다.

회로를 손으로 디버깅하는 법

작은 회로를 디버깅할 때는 전체 행렬을 바로 쓰기보다 basis state를 따라가는 편이 좋습니다.

  1. 입력 basis state를 하나 고릅니다.
  2. 각 게이트가 그 basis state를 어디로 보내는지 계산합니다.
  3. Hadamard나 회전 게이트가 나오면 중첩 항을 펼칩니다.
  4. 제어게이트가 나오면 각 항마다 control 값이 무엇인지 봅니다.
  5. 같은 basis state로 모이는 항들의 진폭을 더합니다.
  6. 마지막에 절댓값 제곱으로 확률을 구합니다.

특히 마지막 5번이 중요합니다. 양자 회로는 같은 결과로 오는 여러 경로의 확률을 더하는 것이 아니라, 진폭을 먼저 더합니다. 그래서 부호와 위상이 맞으면 커지고, 반대면 사라집니다.