양자 게이트를 표현하는 4가지 방법

양자 게이트(quantum gate)를 표현하는 방법에 대해 알아봅시다.

0. Quantum gate

양자 게이트는 기존 컴퓨터의 논리 게이트에 대응되는 개념으로, 양자 회로를 위한 게이트라고 할 수 있습니다. 양자 게이트는 행렬의 값을 가지고 있기 때문에, 값의 처리는 행렬의 곱으로 이루어집니다.
양자 게이트의 종류는 굉장히 많지만, 그 중에서 오늘은 X gate만 다룰 예정입니다.

X gate는 기존 컴퓨터의 NOT gate 역할과 유사합니다.

1. Bra-ket notation

이전 포스팅에서도 언급한 bra-ket notation을 통해 양자 게이트를 표현할 수 있습니다.

\[X|0> = |1>\] \[X|1> = |0>\]

2. Matrix

양자 게이트를 행렬의 곱을 이용해 표현할 수 있습니다.
X gate는 아래와 같은 값을 가집니다.

\[X = \begin{bmatrix} 0 & 1\\ 1 & 0 \end{bmatrix}\]

따라서 X gate를 Qubit의 초기 상태에 적용시키면 아래와 같은 결과가 도출됩니다.

\[X|0> = \begin{bmatrix} 0 & 1\\ 1 & 0 \end{bmatrix}\begin{bmatrix} 1\\ 0 \end{bmatrix}\ =|1>\]

Qiskit을 이용해 X gate 값을 출력할 수도 있습니다.
코드에 대한 자세한 설명은 아래 3. Measurement에서 확인하실 수 있습니다.

from qiskit import *

circuit = QuantumCircuit(1,1)
circuit.x(0)
simulator = Aer.get_backend('unitary_simulator')
result = execute(circuit, backend = simulator).result()
unitary = result.get_unitary()
print(unitary)

#result
#[[0.+0.j 1.+0.j]
# [1.+0.j 0.+0.j]]

3. Measurement

Qiskit을 이용해 Qubit의 상태를 측정해봅시다.

측정하기 전, 일단 양자 회로를 만들어봅시다.

from qiskit import *

#QuantumCircuit(<Qubit>, <Bit>)
circuit = QuantumCircuit(1, 1)
circuit.x(0)

QuantumCircuit(<Qubit>, <Bit>)으로 Qubit의 개수와 Bit의 개수를 지정해 회로를 만들 수 있습니다.
circuit.x(<num>)<num>의 Qubit에 X gate를 넣는 역할을 합니다.

<num>은 0부터 시작하는 거 다들 알고 계시죠?

X gate가 잘 들어갔는지 확인하기 위해서 양자 회로를 그려봅시다.

simulator = Aer.get_backend('statevector_simulator')
result = execute(circuit, backend = simulator).result()
statevector = result.get_statevector()
print(statevector)
#result
#[0.+0.j 1.+0.j]

%matplotlib inline
circuit.draw(output='mpl')

x

첫 번째 Qubit에 X gate가 잘 그려져 있는 것을 확인할 수 있습니다.

이제 드디어 측정을 해봅시다.

저는 backend로 Aer qasm_simulator를 사용하였습니다.
IBM real quantum device를 사용하실 분들은 이 링크를 참고해주세요.

circuit.measure([0], [0])

아까 QuantumCircuit(<Qubit>, <Bit>)처럼 전자가 Qubit, 후자가 Bit를 의미합니다.
circuit.measure([0], [0])은 Qubit을 측정해서 Bit에 값을 저장하라는 뜻입니다.
이 코드를 통해 Qubit의 상태를 측정한 결과를 Bit의 익숙한 값으로 확인할 수 있습니다.

backend = Aer.get_backend('qasm_simulator')
result = execute(circuit, backend, shots = 1024).result()
counts = result.get_counts()

from qiskit.tools.visualization import plot_histogram
plot_histogram(counts)

histogram

X gate의 결과로 1의 상태만 관측되었네요.

4. Bloch sphere

위의 수식을 이용한 표기법 말고도, 입체적으로 Qubit의 상태를 볼 수 있는 방법이 있습니다.
바로 블로흐 구면을 통해서 말이죠!

from qiskit.tools.visualization import plot_bloch_multivector
plot_bloch_multivector(statevector)

bloch

블로흐 구면에서도 1의 상태만 가리키고 있네요!

References


💬 Any comments and suggestions will be appreciated.

Leave a comment