Path: blob/main/translations/ko/ch-gates/multiple-qubits-entangled-states.ipynb
3855 views
다중 큐비트와 얽힘 상태
단일 큐비트는 흥미롭긴 하지만, 개별적으로는 계산상의 이점을 제공하지 않습니다. 이제 여러 개의 큐비트를 표현하는 방법과 이러한 큐비트들이 서로 상호 작용할 수 있는 방법을 살펴보겠습니다. 우리는 앞서 2D 벡터를 사용하여 큐비트의 상태를 표현하는 방법을 배웠습니다. 이번 강의에서는 다중 큐비트의 상태를 표현하는 방법을 살펴 보겠습니다.
강의 내용
다중 큐비트 상태 표현 1.1 연습
다중 큐비트 게이트
3.1 CNOT 게이트
3.2 얽힘 상태
3.3 얽힘 상태 시각화
3.4 연습
1. 다중 큐비트의 상태 표현하기
단일 비트에는 두 가지 가능한 상태가 있고, 큐비트 상태에는 두 가지 복소수 진폭이 있습니다. 마찬가지로 2개의 비트에는 4가지 가능한 상태가 있습니다.
00 01 10 11
그리고 두 큐비트의 상태를 설명하려면 4개의 복소수 진폭이 필요합니다. 이러한 진폭을 다음과 같이 4D 벡터에 저장합니다.
측정 규칙은 여전히 동일한 방식으로 작동합니다.
정규화 조건(확률의 합이 1)도 마찬가지로 만족합니다.
두 개의 서로 다른 큐비트가 있는 경우, 텐서곱을 사용하여 두 큐비트의 결합 상태를 나타낼 수 있습니다.
동일한 규칙을 적용해서 텐서곱을 사용하면 여러 큐비트의 결합 상태를 설명할 수 있습니다. 다음은 3개의 큐비트에 대한 예입니다.
큐비트가 개 있다면, 개의 복소수 진폭을 나열해야 합니다. 보시는 것처럼 이러한 벡터는 큐비트 수에 따라 기하급수적으로 증가합니다. 아주 많은 큐비트를 가진 양자 컴퓨터를 기존 컴퓨터로 시뮬레이션하기 어려운 것은 이런 이유 때문입니다. 최신 노트북으로도 20 큐비트 정도의 일반적인 양자 상태는 쉽게 시뮬레이션할 수 있지만, 100 큐비트를 시뮬레이션하는 것은 최고의 슈퍼컴퓨터에게도 너무나 어려운 일이지요.
예제 회로를 살펴보겠습니다.
각 큐비트는 상태니까, 벡터는 다음과 같이 쓸 수 있겠네요.
그리고 우리는 예상한 결과를 얻었습니다.
1.2 간단한 연습:
Write down the kronecker product of the qubits:
a)
b)
c)
d)주어진 상태를 두 개의 큐비트로 나타내 보세요 :
2. 다중 큐비트 상태 벡터에 단일 큐비트 게이트 적용하기
이전 강의에서 X-gate가 다음과 같은 행렬로 표현되는 것을 보았습니다.
그리고 상태에 이 게이트를 적용하면 다음과 같은 결과를 얻게 되죠.
그러나 X-gate가 다중 큐비트 벡터의 큐비트에서 어떻게 작동할 지는 명확하게 와닿지 않을 수 있습니다. 다행히 규칙은 매우 간단합니다. 텐서곱을 사용하여 다중 큐비트 상태 벡터를 계산했던 것처럼, 텐서곱을 사용하여 이러한 상태 벡터에 작용하는 행렬을 계산합니다. 예를 들어, 아래 회로에서:
텐서곱을 사용하여 동시 연산(H & X)을 나타낼 수 있습니다.
연산 결과는 다음과 같습니다.
그런 다음 이것을 4D 상태벡터 에 적용하면 됩니다. 그런데 연산 결과가 꽤 지저분해 보이네요. 좀 더 깔끔하게 표기할 수도 있습니다.
이 작업을 손으로 일일이 하는 대신, Qiskit의 unitary_simulator 를 사용하여 연산할 수 있습니다. 유니터리 시뮬레이터는 회로에 있는 모든 게이트를 곱해서 양자 회로 전체를 한번에 수행할 수 있는 단일 유니터리 행렬로 컴파일합니다.
결과 보기:
한 번에 하나의 큐비트에만 게이트를 적용하려고 할 때는(예: 아래 회로), 아래 예시처럼 단위 행렬과 텐서곱을 함께 사용하면 됩니다.
3. 다중 큐비트 게이트
이제 다중 큐비트의 상태를 나타내는 방법을 알게 되었으니, 큐비트가 서로 상호 작용하는 방법을 배울 준비가 되었습니다. 중요하게 사용되는 2큐비트 게이트로 CNOT 게이트가 있습니다.
3.1 CNOT 게이트
계산의 기본 요소(원자)들에서 이 게이트를 본 적이 있습니다. 이 게이트는 첫 번째 큐비트(제어)의 상태가 인 경우 두 번째 큐비트(대상)에 대해 X-gate를 수행하는 조건부 게이트입니다. 게이트는 다음과 같이 회로에 그려지며 q0 이 제어이고 q1 이 대상입니다.
큐비트가 또는 의 중첩이 아닐 때는 (고전적인 비트처럼 동작) 매우 간단하고 직관적으로 이 게이트를 이해할 수 있습니다. 고전적인 진리표로 나타내 보죠:
| 입력(t,c) | 출력(t,c) |
|---|---|
| 00 | 00 |
| 01 | 11 |
| 10 | 10 |
| 11 | 01 |
그리고 우리의 4D 상태 벡터에 적용하면 아래 두 행렬 중 하나를 갖게 됩니다.
어떤 큐비트가 제어이고 어떤 큐비트가 대상인지에 따라 달라집니다. 다른 책이나 시뮬레이터, 논문에서는 큐비트를 다른 순서로 정렬할 수도 있지만, 우리의 경우는 왼쪽 행렬이 위 회로의 CNOT에 해당합니다. 이 행렬은 우리의 상태 벡터에서 과 의 진폭을 맞교환합니다.
지금까지는 고전적인 상태에서 어떻게 작용하는지 살펴 보았습니다. 이제 중첩 상태의 큐비트에서 어떻게 작용하는지 봅시다. 큐비트 하나를 상태로 둡니다.
예상대로 상태를 생성합니다.
CNOT 게이트를 적용하면 어떤 일이 발생하는지 봅시다.
상태가 다음과 같이 표시됩니다.
이것이 얽힘 상태라는 것은 매우 흥미로운 점입니다. 이제 자연스럽게 다음 섹션으로 넘어가 보겠습니다.
이 결합된 상태는 두 개의 개별 큐비트 상태로는 만들어 낼 수 없으며 꽤 흥미로운 의미를 지니고 있습니다. 우리의 큐비트는 중첩되어 있긴 하지만, 하나를 측정하면 다른 큐비트의 상태를 알려주고 중첩이 붕괴됩니다. 예를 들어, 위쪽 큐비트를 측정하고 상태를 얻은 경우 큐비트의 결합 상태는 다음과 같아집니다.
이 큐비트를 몇 광년 거리 떨어진 곳으로 보내더라도 하나의 큐비트를 측정하면 중첩이 붕괴되고 다른 큐비트에 즉각적인 영향을 미치게 될 것입니다. 이것이 바로 20세기 초 많은 물리학자들을 화나게 했던 '유령 같은 원거리 작용' 입니다.
측정 결과는 무작위적이며 한 큐비트의 측정 통계는 다른 큐비트의 작업에 영향을 받지 않는다는 점에 유의하는 것이 중요합니다. 이 때문에 공유 양자 상태를 사용하여 통신 할 수 있는 방법이 없습니다. 이것은 비통신 정리로 알려져 있습니다.[1]
이전 장에서 Bloch 구를 정의한 방법을 감안하면, Qiskit이 이렇게 얽힌 큐비트로 Bloch 벡터를 계산하는 것이 명확하게 이해되지 않을 수 있습니다. 단일 큐비트의 경우 축을 따라 움직이는 Bloch 벡터의 위치와 해당 기반(Basis)에서 측정한 기대값은 잘 일치합니다. Bloch 벡터를 그리는 규칙이 그렇다고 받아 들인다면 이런 결론에 도달할 수 있겠죠. 이것은 특정 측정이 보장되는 단일 큐비트 측정 기반이 없다는 것을 보여줍니다. 이것은 단일 큐비트 상태에서 항상 단일 큐비트 기반을 선택할 수 있었던 것과는 대조되는 얘기죠. 이런 식으로 개별 큐비트를 보면 큐비트 간의 상관관계의 중요한 효과를 놓치게 됩니다. 서로 다른 얽힌 상태를 구별할 수 없습니다. 예를 들어 두 상태는 다음과 같습니다.
서로 다른 측정 결과를 가진 매우 다른 상태에도 불구하고 각각의 Bloch 구체에서 모두 동일하게 보일 것입니다.
이 상태 벡터를 다른 방법으로 시각화할 수 있을까요? 이 상태 벡터는 단순히 4개의 진폭(복소수)의 모음이며 이를 이미지에 매핑할 수 있는 방법은 무한합니다. 그런 시각화 방법 중 하나는 Q-구이며, 여기서 각 진폭은 구 표면의 얼룩으로 표시됩니다. 얼룩의 크기는 진폭의 크기에 비례하고 색상은 진폭의 위상에 비례합니다. 과 의 진폭은 동일하고 다른 모든 진폭은 0입니다.
여기에서 큐비트 간의 상관 관계를 명확하게 볼 수 있습니다. Q-구의 모양은 의미가 없으며 단순히 얼룩을 정렬하는 좋은 방법입니다. 상태에서 0 의 수는 Z축의 상태 위치에 비례하므로, 여기에서는 의 진폭이 구의 맨 위 극에 있고 구의 맨 아래 극에 의 진폭이 있습니다.
4. 참고문헌
[1] Asher Peres, Daniel R. Terno, Quantum Information and Relativity Theory, 2004, https://arxiv.org/abs/quant-ph/0212023