Yangja Wiki / 회로설계이론

상태 준비

상태 준비는 알고리즘이 시작되는 지점입니다. 데이터를 어떤 양자상태로 올릴지에 따라 회로 깊이와 전체 이점이 결정됩니다.

Basis state 준비

고전 비트열 x를 계산기저 상태 |x\rangle로 준비하려면 1인 비트에 X를 적용합니다.

$$
|0000\rangle \xrightarrow{X_1X_3} |0101\rangle
$$

균등중첩

모든 입력을 동시에 탐색하려면 Hadamard를 전체 큐비트에 적용합니다.

$$
H^{\otimes n}|0^n\rangle
=
{1\over\sqrt{2^n}}\sum_{x=0}^{2^n-1}|x\rangle
$$

Deutsch-Jozsa, Bernstein-Vazirani, Grover의 시작점입니다.

Angle encoding

실수 데이터 x를 회전각으로 넣을 수 있습니다.

$$
R_y(x)|0\rangle
=
\cos{x\over2}|0\rangle+\sin{x\over2}|1\rangle
$$

데이터 차원만큼 큐비트 또는 반복 업로드가 필요하지만, amplitude encoding보다 준비가 단순합니다.

Amplitude encoding

정규화된 벡터 v\in\mathbb{C}^{2^n}를 진폭으로 직접 올리는 방식입니다.

$$
v=(v_0,\dots,v_{2^n-1})
\quad\Rightarrow\quad
|v\rangle=\sum_i v_i|i\rangle
$$

표현은 압축적이지만, 임의 상태 준비 회로는 일반적으로 비쌉니다. 데이터 로딩 비용이 알고리즘 이점을 먹어버릴 수 있습니다.

상태 준비 체크리스트

  1. 데이터를 basis, angle, amplitude 중 무엇으로 넣는가?
  2. 상태 준비 회로 깊이가 알고리즘 본체보다 크지 않은가?
  3. 정규화 조건이 맞는가?
  4. uncompute가 필요한 중간 데이터인가?

정규화부터 확인하기

상태 준비에서 가장 먼저 확인할 조건은 확률합입니다. 복소 진폭 \alpha_i를 직접 지정한다면 아래가 반드시 1이어야 합니다.

$$
\sum_i |\alpha_i|^2=1
$$

예를 들어 벡터 (1,2,0,1)을 2큐비트 진폭으로 올리고 싶다면 norm은 \sqrt{1^2+2^2+0^2+1^2}=\sqrt6입니다.

$$
|v\rangle
=
{1\over\sqrt6}|00\rangle
+{2\over\sqrt6}|01\rangle
+0|10\rangle
+{1\over\sqrt6}|11\rangle
$$

측정확률은 각각 1/6,4/6,0,1/6입니다. 상태 준비가 제대로 되었는지 확인할 때는 항상 이 확률합부터 봅니다.

단일 큐비트 상태 준비

실수 진폭만 있는 단일 큐비트 상태는 R_y 하나로 만들 수 있습니다.

$$
R_y(\theta)|0\rangle
=
\cos{\theta\over2}|0\rangle+\sin{\theta\over2}|1\rangle
$$

원하는 상태가 \alpha|0\rangle+\beta|1\rangle이고 \alpha,\beta가 실수라면 \alpha=\cos(\theta/2), \beta=\sin(\theta/2)를 맞추면 됩니다.

상대위상이 필요하면 R_z를 함께 씁니다.

$$
|\psi\rangle
=
\cos{\theta\over2}|0\rangle
+e^{i\phi}\sin{\theta\over2}|1\rangle
$$

이 형태는 Bloch sphere의 극각 \theta와 방위각 \phi로 상태를 준비하는 방식입니다.

여러 큐비트 상태 준비의 재귀 구조

2큐비트 상태를 첫 큐비트 기준으로 나누면 아래처럼 쓸 수 있습니다.

$$
|\psi\rangle
=
\alpha|0\rangle|\psi_0\rangle
+\beta|1\rangle|\psi_1\rangle
$$

먼저 첫 큐비트에 \alpha,\beta를 만들고, 첫 큐비트가 0일 때는 |\psi_0\rangle, 1일 때는 |\psi_1\rangle을 controlled preparation으로 만듭니다. 이 논리를 반복하면 임의 n큐비트 상태 준비가 가능합니다.

다만 임의 상태는 2^n개의 진폭을 갖습니다. 따라서 일반적인 amplitude encoding 준비 비용도 대체로 지수적으로 커집니다. 상태 표현은 압축적이지만, 그 상태를 실제로 만드는 비용까지 자동으로 압축되는 것은 아닙니다.

데이터 로딩 병목

양자 머신러닝 설명에서 amplitude encoding은 자주 매력적으로 보입니다. 2^n차원 벡터를 n큐비트로 표현할 수 있기 때문입니다. 하지만 입력 벡터가 고전 메모리에 있다면, 그 벡터를 양자상태로 올리는 회로가 필요합니다.

만약 상태 준비가 O(2^n)이면 이후 알고리즘이 빠르더라도 전체 이점이 사라질 수 있습니다. 그래서 회로설계 문서에서는 “상태를 어떻게 표현할까”와 “그 상태를 어떻게 싸게 준비할까”를 분리해서 봐야 합니다.