Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quantum-kittens
GitHub Repository: quantum-kittens/platypus
Path: blob/main/translations/ko/intro/describing-quantum-computers.ipynb
3855 views
Kernel: Python 3

양자 컴퓨터 설명

이 장에서는 양자컴퓨터를 설명하기 위해 사용하는 다양한 수학적 오브젝트와 표기법을 소개합니다. 수학의 기호나 방정식, 전문적인 어휘는 간결하고 확실한 이해를 도와주지만 기호의 의미를 알기 전에는 이해하기 힘들기 때문에 많은 사람들을 겁먹게 하곤 합니다. 그래서 이 챕터에서는 수식을 인터랙티브하게 보여줍니다. 기호 위에 마우스를 올려놓으면 그 기호가 무엇을 의미하는지 알 수 있습니다. 또 수학이나 양자컴퓨터의 언어를 구사할 수 있게 하기 위해서 난해한 단어를 조금씩 배치하였으며 이 단어에 마우스를 올려놓으면 그 단어의 해설을 볼 수 있게 되어 있습니다.

진폭

고전적인 확률은 0에서 1 사이의 실수로 나타나는 경우가 많지만 진폭은 방향도 가지고 있습니다. 진폭을 표현하기 위한 가장 훌륭한 방법은 복소수입니다. 복소수는 크기와 방향 모두 완전히 기술할 수 있지만 이 과정에서는 두가지 방향(예를 들어 왼쪽과 오른쪽)을 가리키는 진폭만 다루고 그 외에는 신경쓰지 않기로 합니다.

진폭과 확률을 비교하는 이미지

이것으로 계산이 매우 간단해집니다. 즉 진폭을 -1부터 +1까지의 숫자로 나타낼 수 있고, 그 숫자가 양수이면 진폭은 앞을 향하고, 음수이면 뒤를 향하고 있기 때문입니다. 이 특성만으로도 재미있는 것들을 해볼 수 있습니다!

짧은 퀴즈

다음 중 확률값은 아니지만 진폭에 해당되는 값은 무엇입니까?

  1. 1-1

  1. 1/31/3

  1. 1.011.01

  1. 2\sqrt{-2}

상태 벡터

앞의 페이지에서는, 계산의 각 단계에 있어서 결과들의 확률 진폭을 기록하여, 양자계의 행동을 예측할 수 있음을 배웠습니다. 또한 n개의 큐비트에 대해 2n2^n개의 가능한 결과가 있으며, 이러한 진폭을 길이 2n2^n의 목록에 저장할 수 있음을 확인하였습니다. 이 벡터들은 큐비트의 상태를 나타내기 때문에 '상태 벡터'라고 부릅니다.

다음은 두 개의 큐비트가 있는 양자 컴퓨터의 상태 벡터의 예입니다.

ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{x-ket}{|x\rang…

위의 식의 툴팁을 읽고 나서 아래의 질문에 답해 주십시오.

짧은 퀴즈

위의 상태 벡터에서 결과 '01'의 진폭 은 얼마입니까?

  1. 11

  1. 12\sqrt{\tfrac{1}{2}}

  1. 1/21/2

  1. 00


위의 상태 벡터가 큐비트들의 상태를 나타낸다면, 측정하였을때 '00'이 나올 확률 은 얼마일까요?

  1. 11

  1. 12\sqrt{\tfrac{1}{2}}

  1. 1/21/2

  1. 00

벡터의 덧셈과 곱셈

수학의 다른 분야를 공부해보면, 많은 것들이 벡터로 간주된다는 것을 알 수 있습니다. 이 교재와 Qiskit이 벡터를 '숫자의 목록'으로 간주하여 사용하기 때문에 앞서서 벡터를 숫자의 목록으로 소개했습니다. 하지만 벡터를 그냥 숫자 목록과 구별하는 것은 수학자가 두 벡터의 덧셈이나 벡터와 스칼라 의 곱셈에 대해 명확히 정의한 규칙을 지니고 있기 때문입니다.

벡터의 스칼라 곱

다음은 벡터의 스칼라곱 예제입니다.

ParseError: KaTeX parse error: Undefined control sequence: \cssId at position 1: \̲c̲s̲s̲I̲d̲{_number-three}…

벡터의 각 요소에 3을 곱한 것을 볼 수 있습니다. NN 요소가 있는 벡터에 대한 보다 일반적인 규칙은 다음과 같습니다.

ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{scalar}{s} \be…

따라서 위에서 정의한 상태 벡터 x|x\rangle는 다음과 같이 더 간결하게 작성할 수 있습니다.

ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{x-ket}{|x\rang…

두 벡터의 덧셈

두 번째 규칙은 두 벡터를 더하는 것입니다. 이는 두 벡터가 동일한 차원을 가질 경우에만 정의되며, 덧셈의 결과로 같은 차원을 갖는 새로운 벡터를 얻을 수 있습니다. 다음은 일반적인 규칙입니다.

ParseError: KaTeX parse error: Undefined control sequence: \class at position 17: …begin{bmatrix} \̲c̲l̲a̲s̲s̲{_vec-el-0}{a_0…

즉, 벡터를 더하거나 빼는 것으로 새로운 벡터를 만들 수 있습니다. 예를 들어 00|00\rangle01|01\rangle라는 벡터를 이와 같은 방식으로 정의하면 다음과 같습니다.

ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{def-00}{|00\ra…

ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{x-ket}{|x\rang…를 다음과 같이 작성할 수 있습니다:

ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{x-ket}{|x\rang…

이렇게 양자 상태를 더하는 것을 "중첩하기"라고 부르고, "x|x\rangle는 상태 00|00\rangle01|01\rangle의 중첩이다."라고 표현할 수 있습니다. 실제로 양자 컴퓨터에서는 그렇게 계산 기저 상태를 정의하는 것이 일반적입니다.

ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{def-00}{|00\ra…

그리고 각각의 벡터에 적당한 수를 곱해서 더하면 어떤 양자 상태도 이들 상태 벡터의 중첩으로 쓸 수 있습니다.

ParseError: KaTeX parse error: Undefined control sequence: \cssId at position 1: \̲c̲s̲s̲I̲d̲{_psi-ket}{|\ps…

임의의 벡터를 이 네 벡터의 조합으로 쓸 수 있기 때문에 이 네 벡터가 기저를 형성하고 있다고 하고 이를 계산기저라고 부릅니다. 계산기저는 유일한 기저가 아닙니다. 단일 큐비트의 경우, 자주 사용되는 기저는 ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{plus-ket}{|{+}…ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{minus-ket}{|{-… 벡터로 구성됩니다.

동일한 평면에서 |0>, |1> 기준과 |+>, |-> 기준을 모두 보여주는 이미지

ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{plus-ket}{|{+}…ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{minus-ket}{|{-…

실습

다음 방정식이 참이 되도록 α\alpha, β\beta, γ\gammaδ\delta에 대한 값을 찾으십시오.

  • α++β=0\alpha|{+}\rangle + \beta|{-}\rangle = |0\rangle

  • γ++δ=1\gamma|{+}\rangle + \delta|{-}\rangle = |1\rangle

얼마나 많은 다른 상태 벡터가 있을까요?

우리는 벡터를 사용해서 임의의 양자 상태를 표현할 수 있다는 것을 알고 있지만 모든 벡터가 유효한 양자 상태가 될 수 있을까요? 아닙니다. 왜냐하면 출력의 발생 확률은 진폭을 제곱해서 계산되기 때문에 진폭의 제곱합이 1이 되지 않으면 사용할 수 없습니다.

ParseError: KaTeX parse error: Undefined control sequence: \cssId at position 1: \̲c̲s̲s̲I̲d̲{sum}{\sum^{N-1…

짧은 퀴즈

다음 중 유효한 양자 상태는 무엇입니까? (진폭의 제곱을 더해보세요.)

  1. 13[1110]\sqrt{\tfrac{1}{3}}\begin{bmatrix} 1 \\\\ -1 \\\\ 1 \\\\ 0 \end{bmatrix}

  1. 12[1111]\sqrt{\tfrac{1}{2}}\begin{bmatrix} 1 \\\\ -1 \\\\ -1 \\\\ 1 \end{bmatrix}

  1. 12[11]\tfrac{1}{2}\begin{bmatrix} 1 \\\\ 1 \end{bmatrix}

또 다른 요인은 상태 벡터의 '전역 위상'이라고 불리는 것입니다. 위상이 낳는 간섭 효과에 의해서만 위상의 존재를 감지할 수 있기 때문에, 우리는 위상의 차이 만을 측정할 수 있습니다. 만약 상태 벡터의 모든 진폭을 똑같이 회전시킨다면 똑같은 특성을 볼 수 있을 것입니다.

다양한 시작 단계에서 간섭 효과를 보여주는 이미지

다양한 시작 단계에서 간섭 효과를 보여주는 이미지

예를 들어 다음 두 상태를 구별할 수 있는 실험은 존재하지 않습니다:

a=12[1001]|a\rangle = \sqrt{\tfrac{1}{2}}\begin{bmatrix} 1 \\ 0 \\ 0 \\ 1 \end{bmatrix}
a=12[1001]-|a\rangle = \sqrt{\tfrac{1}{2}}\begin{bmatrix} -1 \\ 0 \\ 0 \\ -1 \end{bmatrix}

왜냐하면 각각의 진폭 차이가 같기 때문입니다. 이 두 벡터는 수학적 으로는 다르지만 물리적으로는 같다고 말 할 수 있습니다.

양자 연산

큐비트가 가질 수 있는 다양한 상태에 대해 모두 알고 있으니, 이제 한 상태를 다른 상태로 변환하는 작업을 표현하는 방법을 살펴볼 차례입니다.

어떤 동작에 따라 코인이 앞면에서 뒷면으로 바뀌는 전이 확률이 있듯이, 큐비트의 처음 상태와 마지막 상태에는 각각 전이 진폭이 존재합니다. 이 전이 진폭에 의해서, 임의의 양자 연산을 기술할 수 있습니다.

작업 전후의 두 상태 벡터를 보여주는 이미지

그렇다면 어떤 변환이 가능한 것일까요? 예를 들어 시작 상태 a|a\rangle 가 있고, 그것이 새로운 상태 b|b\rangle 로 변환되는 경우를 생각해 봅시다. 만약 우리가 만들어보려는 식이 모든 가능한 변환을 커버하고 싶다면 a|a\rangle의 각 진폭은 b|b\rangle의 각 진폭으로의 전이 진폭을 가지고 있어야 합니다.

짧은 퀴즈

nn 큐비트 상태 벡터는 최대 2n2^n개의 진폭을 가질 수 있습니다. nn 큐비트의 양자연산을 표현하기 위해 필요한 전이진폭의 최대 개수는 몇 개일까요?

  1. 22n2\cdot 2^n

  1. (2n)2(2^n)^2

  1. 2n2n

  1. 22n2^{2^n}

이렇게 선을 긋는 것은 번거롭기 때문에, 대신 이 수치들을 모두 행렬 에 넣습니다.

ParseError: KaTeX parse error: Undefined control sequence: \cssId at position 1: \̲c̲s̲s̲I̲d̲{u-gate}{U} = …

예를 들어, 다음은 '계산의 기본요소(원자)들' 챕터에서 보았던 CNOT 연산을 나타내는 행렬입니다.

ParseError: KaTeX parse error: Undefined control sequence: \cssId at position 1: \̲c̲s̲s̲I̲d̲{_cnot-gate}{\t…

짧은 퀴즈

CNOT 연산(위 그림)에서 상태 10|10\rangle 01|01\rangle 로 변환할 때 전이 진폭은 무엇일까요?

  1. 11

  1. 00

  1. [1000]\begin{bmatrix} 1 & 0 & 0 & 0\end{bmatrix}

  1. [0010]\begin{bmatrix} 0 \\ 0 \\ 1 \\ 0\end{bmatrix}

다음은 이전 페이지에서 본 H-gate의 행렬입니다.

ParseError: KaTeX parse error: Undefined control sequence: \class at position 41: …begin{bmatrix} \̲c̲l̲a̲s̲s̲{_t_amp_0_0}{1}…

(행렬과 스칼라의 곱셈은 벡터와 같은 규칙을 사용합니다). 그리고 어떤 연산이 큐비트들에 어떤 영향을 주는지를 보고 싶을 때에는 각 전이 진폭을 입력 상태 벡터의 각 상태의 진폭에 곱하고 각 상태의 진폭을 더해 출력 상태 벡터로 계산합니다. 이는 확률(또는 진폭) 트리의 각 가지를 따라 곱하고 마지막에 총 확률(또는 진폭)을 더하는 것과 동일합니다.

수학에 익숙한 분이라면 바로 알 수 있듯, 이것은 일반적인 행렬의 곱셈입니다.

ParseError: KaTeX parse error: Undefined control sequence: \class at position 50: …begin{bmatrix} \̲c̲l̲a̲s̲s̲{_t_amp_0_0}{1}…

H-gate가 상태 |0>을 상태 |+>로 변환하는 방법을 보여주는 이미지

양자 연산의 규칙

모든 벡터가 유효한 상태 벡터가 아닌 것처럼 모든 행렬이 유효한 양자 연산인 것은 아닙니다. 만약 행렬이 진정한 연산으로서 의미를 갖는다면 출력 상태의 합계 확률을 1로 유지해야 합니다. 따라서 다음의 행렬은 양자 연산으로 사용 할 수 없습니다.

ParseError: KaTeX parse error: Undefined control sequence: \class at position 17: …begin{bmatrix} \̲c̲l̲a̲s̲s̲{_t_amp_0_0}{1}…

왜냐하면 이 행렬은 0|0\rangle 상태에 대해 다음과 같이 작동하기 때문입니다:

ParseError: KaTeX parse error: Undefined control sequence: \class at position 17: …begin{bmatrix} \̲c̲l̲a̲s̲s̲{_t_amp_0_0}{1}…

그리고 확률의 합은 2가 되므로 조건을 만족하지 않게 됩니다. 또한 상태 1|1\rangle $에 작용한 경우 합계 확률은 0이 되어, 마찬가지로 규칙에 어긋나게 됩니다. 어떠한 경우에도 확률의 총합이 변하지 않으려면 연산이 가역적(reversible)으로 될 필요가 있습니다. 즉, 양자 게이트를 거꾸로 실행해 '원래로 되돌릴' 수 있는 것입니다(회전을 반전시키는 것을 기억하십시오). 이러한 성질을 가진 행렬을 유니터리 행렬이라고 부릅니다. 양자 게이트를 '유니터리' 또는 '유니터리 게이트'라고 부르는 것을 흔히 볼 수 있습니다.