브라-켓과 내적
켓은 열벡터, 브라는 켤레전치한 행벡터입니다. 게이트는 ket에 왼쪽에서 곱하는 행렬입니다.
$$
|\psi\rangle =
\begin{bmatrix}\alpha\\\beta\end{bmatrix},
\qquad
\langle\psi| =
\begin{bmatrix}\alpha^* & \beta^*\end{bmatrix}
$$
두 상태의 내적은 겹침을 의미하고, 측정 확률은 겹침의 절댓값 제곱으로 계산됩니다.
$$
\Pr(\phi\leftarrow\psi)=|\langle\phi|\psi\rangle|^2
$$
Pauli 게이트
Pauli-X는 비트 반전, Pauli-Z는 위상 반전, Pauli-Y는 두 효과에 복소 위상까지 섞인 게이트입니다.
$$
X=
\begin{bmatrix}
0&1\\
1&0
\end{bmatrix},
\quad
Y=
\begin{bmatrix}
0&-i\\
i&0
\end{bmatrix},
\quad
Z=
\begin{bmatrix}
1&0\\
0&-1
\end{bmatrix}
$$
특히 Z|1\rangle=-|1\rangle처럼 부호만 바꾸는 위상 변화는 측정 전에는 직접 보이지 않지만, 다른 경로와 간섭할 때 알고리즘의 결과를 바꿉니다.
Z basis는 계산기저 \{|0\rangle,|1\rangle\}를 뜻합니다. 이 기저에서 Z는 대각행렬이고, |0\rangle와 |1\rangle는 Z의 고유상태입니다.
$$
Z|0\rangle=|0\rangle,\qquad
Z|1\rangle=-|1\rangle
$$
X basis는 \{|+\rangle,|-\rangle\} 기저를 뜻합니다. 이 기저에서 |+\rangle와 |-\rangle는 X의 고유상태입니다.
$$
|+\rangle={|0\rangle+|1\rangle\over\sqrt{2}},
\qquad
|-\rangle={|0\rangle-|1\rangle\over\sqrt{2}}
$$
$$
X|+\rangle=|+\rangle,\qquad
X|-\rangle=-|-\rangle
$$
Hadamard 게이트
Hadamard 게이트는 Z basis와 X basis를 서로 바꿔주는 기저 변환입니다. 즉 계산기저에서 보면 중첩을 만들고, X basis에서 보면 다시 계산기저로 되돌립니다.
$$
H={1\over\sqrt{2}}
\begin{bmatrix}
1&1\\
1&-1
\end{bmatrix},
\qquad
H|0\rangle=|+\rangle,\quad H|1\rangle=|-\rangle
$$
Hadamard를 한 번 더 적용하면 원래 계산기저로 돌아옵니다. 수식으로는 H^2=I이고, 상태별로 쓰면 아래와 같습니다.
$$
H|0\rangle=|+\rangle,\qquad
H|1\rangle=|-\rangle
$$
$$
H|+\rangle=|0\rangle,\qquad
H|-\rangle=|1\rangle
$$
그래서 회로에서 Hadamard는 단순히 “중첩을 만드는 게이트”라고만 보면 부족합니다. 더 정확히는 Z basis에서 X basis로, 또는 X basis에서 Z basis로 관측 관점을 바꾸는 게이트입니다. 예를 들어 Z로 보이지 않던 위상 정보가 H를 거친 뒤에는 계산기저 측정 결과로 드러날 수 있습니다.
위상 게이트
S와 T 게이트는 |1\rangle 성분의 위상을 회전합니다.
$$
S=
\begin{bmatrix}
1&0\\
0&i
\end{bmatrix},
\qquad
T=
\begin{bmatrix}
1&0\\
0&e^{i\pi/4}
\end{bmatrix}
$$
위상은 영어로 phase입니다. phase는 단독으로는 측정 확률을 직접 바꾸지 않는 경우가 많아서 처음에는 덜 중요해 보일 수 있습니다. 하지만 양자 알고리즘의 핵심은 여러 계산 경로의 phase를 맞추거나 어긋나게 만들어 간섭을 설계하는 데 있습니다. 그래서 S, T, R_z(\theta) 같은 위상 계열 게이트는 뒤에서 phase kickback, QFT, phase estimation을 읽을 때 계속 다시 등장합니다.
회전 게이트
Pauli 행렬을 축으로 하는 회전은 Bloch sphere에서 상태를 돌리는 연산입니다.
$$
R_x(\theta)=e^{-i\theta X/2},
\qquad
R_y(\theta)=e^{-i\theta Y/2},
\qquad
R_z(\theta)=e^{-i\theta Z/2}
$$
실제 하드웨어에서는 기본 게이트 집합이 플랫폼마다 다르므로, 회로는 보통 transpiler가 장비의 native gate로 다시 분해합니다.
큐비트가 늘어날 때의 텐서 확장
단일 큐비트 게이트 U를 여러 큐비트 상태에 적용하려면 나머지 큐비트에는 항등행렬을 붙입니다.
$$
U\text{ on first qubit} = U \otimes I,
\qquad
U\text{ on second qubit} = I \otimes U
$$
큐비트가 하나 늘 때마다 상태벡터의 길이는 두 배가 됩니다.
$$
n\text{ qubits} \quad\Rightarrow\quad
2^n\text{-dimensional state vector}
$$
그래서 1큐비트 게이트를 전체 시스템 행렬로 펼치면 크기가 빠르게 커집니다. 예를 들어 10큐비트 상태에는 길이 2^{10}=1024인 복소 벡터가 필요합니다.
CX 게이트
CX 또는 CNOT은 control 큐비트가 1일 때 target 큐비트에 X를 적용합니다.
$$
\mathrm{CX}|a,b\rangle = |a, b\oplus a\rangle
$$
$$
\mathrm{CX} =
\begin{bmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&0&1\\
0&0&1&0
\end{bmatrix}
$$
CX는 얽힘을 만들 수 있는 대표적인 2큐비트 게이트입니다. 예를 들어 H 뒤에 CX를 적용하면 Bell 상태가 됩니다.
$$
\mathrm{CX}(H\otimes I)|00\rangle
=
{ |00\rangle + |11\rangle \over \sqrt{2}}
$$
CCX와 ancilla
CCX, 즉 Toffoli 게이트는 control 큐비트 두 개가 모두 1일 때 target에 X를 적용합니다.
$$
\mathrm{CCX}|a,b,c\rangle
=
|a,b,c\oplus ab\rangle
$$
이 게이트는 reversible classical computation의 핵심 재료입니다. AND 결과를 보조 큐비트에 저장할 때 자주 사용합니다.
$$
|a,b,0\rangle
\xrightarrow{\mathrm{CCX}}
|a,b,ab\rangle
$$
여기서 세 번째 큐비트처럼 계산 중간값을 담기 위해 추가로 쓰는 큐비트를 ancilla라고 부릅니다. ancilla는 계산 후 원래 상태로 되돌리는 uncomputation 과정을 거쳐야 뒤의 간섭을 망치지 않습니다.
게이트를 읽는 순서
- 게이트가 몇 큐비트에 작용하는지 확인합니다.
- 계산기저 상태가 어디로 가는지 먼저 봅니다.
- 위상 변화가 있는지 확인합니다.
- 여러 큐비트 회로라면 텐서곱으로 전체 상태공간이 커진다는 점을 기억합니다.
- ancilla가 있다면 계산 후 uncompute되는지 확인합니다.
다음에 읽을 글
참고자료
- Michael A. Nielsen, Isaac L. Chuang, Quantum Computation and Quantum Information.
- IBM Quantum Documentation, Circuit library and standard gates.
- Google Quantum AI, Cirq gates and operations documentation.