양자 상태와 큐비트 - 도입

Pt J·2020년 11월 5일
0

[斷] QISKit

목록 보기
4/11
post-thumbnail

이 포스트의 내용은 Qiskit Textbook | Quantum States and Qubits - IntroductionQiskit Textbook | Appendix - Linear Algebra을 통해 공부한 흔적임을 밝힙니다.

양자 객체를 처음 접하면 그들은 무작위의 혼란스러운 것으로 보일 수 있지만
그것은 단지 우리가 알던 고전적인 컴퓨팅과는 다른 규칙을 따르는 것뿐이다.
그 규칙을 알고나면 새롭고 강력한 기술을 만들어내기 위해 그것을 사용할 수 있게 될 것이다.

큐비트 Qubit; Quantum Bit

고전적인 컴퓨터에서 정보의 최소 단위는 비트(bit)로, 0 또는 1을 나타낸다.
양자 컴퓨터에서 사용하는 정보의 최소 단위능 양자 비트로, 흔히 큐비트, 큐빗이라고 부른다.
큐비트에 대해 보다 깊이 이해하기 위해서는
큐비트에 게이트(gate)를 적용했을 때 그것이 어떻게 되는지 추적할 방법이 필요하다.
그리고 이를 위한 가장 강력한 방법은 벡터와 행렬의 수학적 언어를 사용하는 것이다.

다음은 큐비트를 수학적으로 나타낸 하나의 예시다.
bloch.png


선형대수 Linear Algebra

textbook의 내용은 선형대수를 선수 지식으로 요구한다.
그런 의미에서 선형대수 개념을 짚고 넘어가자.

벡터Vectors와 벡터공간Vector Spaces

벡터는 양자 컴퓨팅에서 가장 중요한 수학적 양적 개념 중 하나다.
벡터 v|v⟩는 벡터공간이라는 집합의 원소로 정의된다.
좀더 직관적으로 얘기하자면 방향과 크기를 갖는 수학적 양(量)이라고 할 수 있다.

Vector

  • elements of a set known as a vector space
  • a mathematical quantity with both direction and magnitude

예를 들어 xx 성분과 yy 성분을 가진 다음과 같은 벡터 (35)\begin{pmatrix}3\\5\end{pmatrix}

xx축 방향으로 33, yy축 방향으로 55만큼의 거리를 나타내는 화살표로 시각화할 수 있다.
(x:3, y:5) 위 그림에서는 벡터가 원점에서 시작되지만 벡터의 꼬리가 항상 원점에 있을 필요는 없다.

양자 컴퓨팅에서 우리는 종종 상태 벡터State Vectors를 다루게 된다.
상태 벡터는 양자 상태에 해당하는 공간의 특정 지점을 가리키며
블로흐 구면Bloch Sphere을 통해 다음과 같이 시각화할 수 있다.
bloch-sphere.png 블로흐 구면은 소위 "상태 공간"이라고 불리며
그것의 중심에서 시작되는 상태 벡터가 그 내부에서 표면을 가리키는 화살표로 표현된다.

위 이미지의 블로흐 구면에서 상태 벡터는 상단의 0|0⟩와 하단의 1|1⟩의 가운데에 위치하고 있으므로
0|0⟩1|1⟩ 사이에 균형된 중첩 상태an even superposition를 이루고 있음을 알 수 있다.

벡터 공간에 대한 정의로 돌아가서,
벡터 공간은 체Field 위에서 정의되며
두 가지 조건을 만족하는 벡터들의 집합이다.
먼저, 어떤 벡터 공간 VV에 속하는 임의의 두 벡터를 더해 만든 벡터도 벡터 공간 VV에 속해야 한다.
그리고 체 FF에 속하는 임의의 수와 벡터 공간 VV에 속하는 임의의 벡터의
스칼라곱으로 만들어지는 벡터 또한 벡터 공간 VV에 속해야 한다.

Vector Space

  • a set of vectors
  • a+bV|a⟩ + |b⟩ ∈ V, if a,bV|a⟩, |b⟩ ∈ V
  • naVn|a⟩ ∈ V, if aV,nF|a⟩ ∈ V, n ∈ F

예를 들어, 실수 R\mathbb{R}에 대해서 체 R\mathbb{R} 위에 정의된 집합 R2\mathbb{R}^2는 다음을 만족하므로 벡터 공간이다.

(x1y1)+(x2y2)=(x1+x2y1+y2)\begin{pmatrix}x_1\\y_1\end{pmatrix} + \begin{pmatrix}x_2\\y_2\end{pmatrix} = \begin{pmatrix}x_1 + x_2\\y_1 + y_2\end{pmatrix}
nv=(nxny)VnRn∣v⟩ = \begin{pmatrix}nx\\ny\end{pmatrix} ∈ V\quad ∀n ∈ \mathbb{R}

행렬Matrices과 행렬연산Matrix Operations

또다른 기본 개념인 행렬에 대해 알아보자.
행렬은 어떤 벡터를 다른 벡터로 변환한다.

vv=Mv|v⟩ \rightarrow |v'⟩ = M|v⟩

일반적으로 행렬은 다음과 같이 배열의 형태로 표현된다.

M=(12315i0i+i74)M = \begin{pmatrix}1 & -2 & 3\\1 & 5i & 0\\i+i & 7 & -4\end{pmatrix}

행렬곱을 통해 벡터에 행렬을 적용할 수 있다.
일반적으로 행렬곱은 두 개의 행렬 사이에서 이루어진다.
첫번째 행렬의 ii번째 행과 두번째 행렬의 jj번째 열 사이에서 연산이 이루어지는데
그것의 kk번째 원소끼리 곱한 것의 합이 행렬곱 결과 만들어진 행렬이 ii번째 행 jj번째 열 원소가 된다.

예를 들면, 다음과 같은 연산이 이루어지는 것이다.

(2051)(3121)=((2)(3)+(0)(2)(2)(1)+(0)(1)(5)(3)+(1)(2)(5)(1)+(1)(1))=(62174)\begin{pmatrix}2 & 0\\5 & -1\end{pmatrix}\begin{pmatrix}-3 & 1\\2 & 1\end{pmatrix} \\= \begin{pmatrix}(2)(-3) + (0)(2) & (2)(1) + (0)(1)\\(5)(-3) + (-1)(2) & (5)(1) + (-1)(1)\end{pmatrix} \\= \begin{pmatrix}-6 & 2\\-17 & 4\end{pmatrix}

양자 컴퓨팅을 하기 위해서 행렬을 적용하여 조작하는 양자 상태 벡터가 존재한다.
벡터는 하나의 열을 가진 행렬이라고 볼 수 있다.
따라서 벡터에 행렬을 적용하기 위해서는 앞서 설명한 행렬곱과 같은 방식을 사용할 수 있다.
양자 컴퓨터의 큐비트를 조작하기 위해서는 일련의 양자 게이트Quantum Gates를 적용해야 한다.
각각의 양자 게이트는 상태 벡터에 적용되어 그것을 변화시킬 수 있는 행렬로 표현할 수 있다.

파울리 X 게이트 Pauli-X gate

예를 들어, 흔히 사용되는 파울리 X 게이트는 다음과 같이 표현된다.

σx=(0110)σ_x = \begin{pmatrix}0 & 1\\1 & 0\end{pmatrix}

파울리 X 게이트는 고전적인 NOT 논리 게이트와 유사하게 동작한다.
다시 말해, |0⟩는 |1⟩으로, |1⟩는 |0⟩으로 뒤집는 동작을 수행하는 게이트다.
|0⟩와 |1⟩는 다음과 같이 행렬로 나타낼 수 있으며
// 이와 같이 벡터를 행렬로 표현하여 하나의 열로 이루어진 행렬을 열벡터라고도 한다.

0=(10)|0⟩ = \begin{pmatrix}1\\0\end{pmatrix}
1=(01)|1⟩ = \begin{pmatrix}0\\1\end{pmatrix}

파울리 X 게이트를 적용하면 다음과 같다.

σx0=(0110)(10)=((0)(1)+(1)(0)(1)(1)+(0)(0))=(01)=1σ_x|0⟩ = \begin{pmatrix}0 & 1\\1 & 0\end{pmatrix}\begin{pmatrix}1\\0\end{pmatrix} = \begin{pmatrix}(0)(1) + (1)(0)\\(1)(1) + (0)(0)\end{pmatrix} = \begin{pmatrix}0\\1\end{pmatrix} = |1⟩
σx1=(0110)(01)=((0)(0)+(1)(1)(1)(0)+(0)(1))=(10)=0σ_x|1⟩ = \begin{pmatrix}0 & 1\\1 & 0\end{pmatrix}\begin{pmatrix}0\\1\end{pmatrix} = \begin{pmatrix}(0)(0) + (1)(1)\\(1)(0) + (0)(1)\end{pmatrix} = \begin{pmatrix}1\\0\end{pmatrix} = |0⟩

에르미트 행렬Hermitian Matrix과 유니터리 행렬Unitary Matrix

양자 컴퓨팅을 하다보면 두 가지 중요한 행렬, 에르미트 행렬과 유니터리 행렬을 마주하게 된다.

어떤 행렬이 자신의 켤레전치conjugate transpose와 같을 때 그 행렬을 에르미트 행렬이라고 한다.
켤레전치는 어떤 행렬에 켤레복소수를 취한 행렬의 전치행렬을 의미한다.

Hermitian Matrix

  • MM = MM^†

예를 들어, yy축을 기준으로 값을 뒤집는 파울리 Y 게이트의 행렬이 에르미트 행렬에 속한다.

σy=(0ii0)σy=(0(i)(i)0)=(0ii0)=σyσ_y = \begin{pmatrix}0 & -i\\i & 0\end{pmatrix} \\⇒ σ^†_y = \begin{pmatrix}0 & -(i)\\-(-i) & 0\end{pmatrix} = \begin{pmatrix}0 & -i\\i & 0\end{pmatrix} = σ_y

유니터리 행렬 또한 그것의 컬레전치와 유관한데
어떤 행렬의 역행렬이 원래 행렬의 켤레전치와 같을 때 그 행렬을 유니터리 행렬이라고 한다.

Unitary Matrix

  • M1M^{-1} = MM^†

파울리 Y 게이트의 행렬은 에르미트 행렬이면서 유니터리 행렬이기도 하다.

σy=(0ii0)σy=(0ii0)σyσy=((0)(0)+(i)(i)(0)(i)+(i)(0)(i)(0)+(0)(i)(i)(i)+(0)(0))=(1001)=Iσ_y = \begin{pmatrix}0 & -i\\i & 0\end{pmatrix} \quad σ^†_y = \begin{pmatrix}0 & -i\\i & 0\end{pmatrix} \\⇒ σ^†_yσ_y = \begin{pmatrix}(0)(0) + (-i)(i) & (0)(-i) + (-i)(0)\\(i)(0) + (0)(i) & (i)(-i) + (0)(0)\end{pmatrix} = \begin{pmatrix}1 & 0\\0 & 1\end{pmatrix} = \mathbb{I}

생성 집합Spanning Sets, 선형 종속Linear Dependence, 기저Bases

어떤 벡터공간 VV에 속하는 일부 벡터들로 이루어진 집합 SS
그 집합에 속한 벡터들의 선형 결합으로 벡터공간 VV의 부분공간 VSV_S의 어떤 벡터든 작성할 수 있을 때
부분공간 VSV_S를 생성한다고 하며, 그 집합을 생성 집합이라고 한다.
부분공간은 어떤 벡터공간 연산에 대해 닫혀 있는, 벡터공간의 부분집합이다.

FF 위에 정의된 벡터공간의 벡터 v1|v_1⟩, ..., vn|v_n⟩선형 결합
FF의 원소 fif_i에 대하여 vi|v_i⟩fif_i의 스칼라곱의 합으로 정의된다.

v=f1v1+f2v2+...+fnvn=ifivi|v⟩ = f_1|v_1⟩ + f_2|v_2⟩ + ... + f_n|v_n⟩ = \displaystyle \sum_if_i|v_i⟩

어떤 벡터들의 선형 결합으로 만들어진 벡터가 영벡터일 때 그들은 선형 종속이라고 하며
선형 종속인 벡터들 중 임의의 벡터는 그것을 제외한 나머지 벡터들의 선형 결합으로 만들 수 있다.
반대로, 임의의 벡터를 나머지 벡터들의 선형 결합으로 만들 수 없는 경우 선형 독립이라고 한다.

기저는 선형적으로 독립인 생성 집합이다.
다시 말해, 벡터공간의 기저는 그 벡터공간을 생성하는 가장 작은 생성집합이다.
벡터가 하나라도 모자라면 벡터공간을 생성하지 못하고
하나라도 많으면 선형 독립이 되지 않아
어떤 벡터공간의 기저의 벡터 개수 즉, 크기는 일정하다.
벡터공간의 기저의 크기를 차원Dimension이라고 한다.

벡터공간의 모든 벡터는 기저의 선형 결합으로 나타낼 수 있으므로
기저는 벡터공간을 일반화할 수 있게 해준다는 점에서 중요하다.
양자 컴퓨팅에서 자주 마주하는 기저로 0|0⟩1|1⟩가 있다.
모든 큐비트의 상태는 0|0⟩1|1⟩의 선형 결합으로 나타낼 수 있다.

예를 들어, 0|0⟩로 측정될 확률이 1|1⟩로 측정될 확률이 동일한 중첩 상태는
0|0⟩1|1⟩의 선형 결합으로 다음과 같이 나타낼 수 있다.

0+12|0⟩ + |1⟩ \over \sqrt2

힐베르트 공간Hilbert Spaces, 직교정규성Orthonormality, 내적Inner Products

힐베르트 공간은 양자역학과 양자 컴퓨팅에서 매우 중요한 수학적 구조 중 하나로,
모든 양자 상태 벡터가 "살아있는" 상태 공간이라고 생각할 수 있다.
힐베르트 공간에는 내적이 내재되어 있다.

양자역학과 양자 컴퓨팅의 맥락에서 두 상태 벡터의 내적
한 벡터가 다른 벡터를 따라 놓여 있는 양을 나타내는 스칼라값을 반환한다.
정사영Projection의 개념이라 볼 수 있겠다.
내적으로부터 다른 양자 상태의 측정 확률을 계산할 수 있다.

힐베르트 공간 상의 두 벡터 a|a⟩b|b⟩에 대해서 그들의 내적은 ab⟨a|b⟩로 표기한다.
a⟨a|a|a⟩의 컬레전치 즉, a|a⟩^†와 같다.

ab=(a1a2...an)(b1b2...bn)=a1b1+a2b2+...+anbn(여기서 *는 벡터의 컬레복소수를 나타낸다)⟨a|b⟩ = \begin{pmatrix}a^*_1 & a^*_2 & ... & a^*_n \end{pmatrix}\begin{pmatrix}b^*_1 \\ b^*_2 \\ .\\.\\. \\ b^*_n \end{pmatrix} = a^*_1b^*_1 + a^*_2b^*_2 + ... + a^*_nb^*_n \\\text{(여기서 *는 벡터의 컬레복소수를 나타낸다)}

양자 시스템을 표현하는 힐베르트 공간에서 가장 중요한 조건 중 하나는
어떤 벡터의 자기 자신과의 내적은 항상 1이라는 것이다.
이는 정규화 조건normalization condition이라 불리며, 어떤 벡터의 제곱의 길이는 1이 된다는 것이다.
양자 시스템에서 상태 벡터의 크기가 항상 1이기 때문에 성립하는 것이다.
양자 시스템에서 특정 방향으로의 벡터의 크기는 그 상태에서의 측정과 관련하여 확률 진폭을 나타낸다.
그리고 어떤 상태에서든 그 상태에서 양자 시스템 발견 확률의 합은 1이어야 한다.

유니터리 행렬은 양자 컴퓨팅에서 중요한데 그것은 내적을 보존하기 때문이다.
내적을 보존한다는 것은 행렬의 순서를 변경하더라도 정규화 조건을 만족한다는 것이다.

외적Outer Products과 텐서곱Tensor Products

벡터를 곱하는 방법은 내적 외에도 존재한다.
그 중 하나가 외적인데,
힐베르트 공간 상의 두 벡터 a|a⟩b|b⟩에 대해서 그들의 외적은 ab|a⟩⟨b|로 표기한다.
그리고 내적에서 살펴봤듯이 b⟨b|b|b⟩의 컬레전치 즉, b|b⟩^†와 같다.
스칼라값을 반환하는 내적과 달리 외적의 결과값은 행렬이다.

ab=(a1a2an)(b1b2bn)=(a1b1a1b2a1bna2b1a2b2 a3b1 anb1anbn)|a\rangle\langle b| = \begin{pmatrix}a_1\\a_2\\\vdots\\a_n\end{pmatrix}\begin{pmatrix}b_1&b_2&\cdots&b_n\end{pmatrix} =\begin{pmatrix}a_1b_1^*&a_1b_2^*&\cdots&a_1b_n^*\\a_2b_1^*&a_2b_2^*&\ &\vdots\\a_3b_1^*&\ &\ddots&\vdots\\a_nb_1^*&\cdots&\cdots&a_nb_n^*\end{pmatrix}

외적을 사용하면 양자 게이트를 행렬이 아닌 bra-ket으로 표현할 수 있다.
// ⟨| 형태를 띈 걸 bra, |⟩ 형태를 띈 걸 ket이라고 하며
// 이것은 양자 상태 벡터를 표기하는 일반적인 방법이다.

예를 들어, 파울리 X 게이트는 다음과 같이 01|0⟩⟨1|10|1⟩⟨0|의 합으로 나타낼 수 있다.

01+10=(10)(01)+(01)(10)=(0100)+(0010)=(0110)=σx|0\rangle\langle1|+|1\rangle\langle0|=\begin{pmatrix}1\\0\end{pmatrix}\begin{pmatrix}0&1\end{pmatrix}+\begin{pmatrix}0\\1\end{pmatrix}\begin{pmatrix}1&0\end{pmatrix}=\begin{pmatrix}0&1\\0&0\end{pmatrix}+\begin{pmatrix}0&0\\1&0\end{pmatrix}=\begin{pmatrix}0&1\\1&0\end{pmatrix}=\sigma_x

외적은 사실 텐서곱의 특수한 경우다.
텐서곱은 벡터공간을 함께 곱하는 데 사용되는 일반적인 연산으로,
주로 둘 이상의 큐비트의 공유 상태를 기술하는 데 사용된다.
텐서곱은 외적과 달리 어떤 벡터에 컬레전치를 취하지 않는다.
ket(|⟩)과 bra(⟨|)를 곱하는 대신 두 개의 ket을 곱하는 연산을 수행한다.
벡터 a|a⟩b|b⟩의 텐서곱은 ab|a⟩⊗|b⟩ 또는 ab|ab⟩로 나타내며 그 계산은 다음과 같다.

ab=(a1(b1b2)a2(b1b2))=(a1b1a1b2a2b1a2b2)|a\rangle\otimes|b\rangle=\begin{pmatrix}a_1\begin{pmatrix}b_1\\b_2\end{pmatrix}\\a_2\begin{pmatrix}b_1\\b_2\end{pmatrix}\end{pmatrix}=\begin{pmatrix}a_1b_1\\a_1b_2\\a_2b_1\\a_2b_2\end{pmatrix}

이를 행렬로 나타내면,

AB=(a11Ba1nBam1BamnB)A\otimes B = \begin{pmatrix}a_{11}B&\cdots&a_{1n}B\\\vdots&\ddots&\vdots\\a_{m1}B&\cdots&a_{mn}B\end{pmatrix}

고유벡터Eigenvectors와 고유값Eigenvalues

어떤 행렬 AA와 스칼라 λ\lambda, 그리고 벡터 v|v⟩에 대해서 Av=λvA|v⟩ = \lambda|v⟩가 성립할 때
벡터 v|v⟩를 고유벡터, 그리고 이에 대응하는 스칼라 λ\lambda를 고유값이라고 부른다.
고유벡터와 고유값은 양자역학에서 매우 중요한 물리적 의미를 갖는다.

어떤 행렬 AA가 주어졌을 때 다음과 같은 식을 통해 고유벡터와 고유값을 구할 수 있다.

Avλv=0(AλI)v=0A|v\rangle-\lambda|v\rangle=0\Rightarrow(A-\lambda\mathbb{I})|v\rangle=0

양변을 행렬 (AλI)1(A − \lambda I)^{−1}로 나누면 v=0|v⟩ = 0라는 결과를 얻을 수 있지만 이걸 원하는 게 아니다.
따라서 양변을 행렬 (AλI)1(A − \lambda I)^{−1}로 나눌 수 없도록 하여 다른 해를 구할 것이다.
(AλI)(A − \lambda I)가 역행렬을 갖지 않도록 하는 것이다.

역행렬을 구하는 식은 다음과 같다.

M1=1det(M)F(M)M^{-1}={1\over\text{det}(M)}F(M)

F(M)F(M)에는 행렬 MM의 수반행렬이 들어가겠지만 그건 지금 중요하지 않다.
이 값이 존재하지 않기 위해서는 단지 det(MM)가 0인 것으로 충분하다.
즉, det(AλIA − \lambda I)가 0이 되면 스칼라 λ\lambda가 행렬 AA의 고유값이고
이걸 통해 고유벡터 v|v⟩를 구할 수 있다.

예를 들어, 파울리 Z 게이트의 행렬 σzσ_z의 고유값과 고유벡터를 구하고자 한다면,

det(σzλI)=det(1λ001λ)=(1λ)(1λ)=1λ2=0 λ=±1 (1001)v=v(1001)(ab)=(ab)(ab)=(ab) a=1,b=0 (1001)v=v(1001)(ab)=(ab)(ab)=(ab) a=0,b=1\text{det}(\sigma_z - \lambda\mathbb{I})=\text{det}\begin{pmatrix}1-\lambda&0\\0&-1-\lambda\end{pmatrix} =(-1-\lambda)(1-\lambda)=1-\lambda^2=0 \\\ \\ \Rightarrow\lambda = \pm1 \\\ \\ \begin{pmatrix}1&0\\0&-1\end{pmatrix}|v\rangle=|v\rangle\quad \Rightarrow\begin{pmatrix}1&0\\0&-1\end{pmatrix}\begin{pmatrix}a\\b\end{pmatrix}=\begin{pmatrix}a\\b\end{pmatrix}\quad \Rightarrow\begin{pmatrix}a\\-b\end{pmatrix}=\begin{pmatrix}a\\b\end{pmatrix} \\\ \\ \Rightarrow a = 1,\quad b = 0 \\\ \\ \begin{pmatrix}1&0\\0&-1\end{pmatrix}|v\rangle=-|v\rangle\quad \Rightarrow\begin{pmatrix}1&0\\0&-1\end{pmatrix}\begin{pmatrix}a\\b\end{pmatrix}=\begin{pmatrix}-a\\-b\end{pmatrix}\quad \Rightarrow\begin{pmatrix}a\\-b\end{pmatrix}=\begin{pmatrix}-a\\-b\end{pmatrix} \\\ \\ \Rightarrow a = 0,\quad b = 1

행렬 지수 Matrix Exponentials

행렬 지수는 특이하면서도 중요한 개념이다.

에르미트 행렬 HH와 실수 γ\gamma에 대하여 어떤 유니터리 행렬 UU를 다음과 같이 변환한다고 하자.

U=eiγHU=e^{i\gamma H}

이 때, UU의 컬레전치 UU^\dagger를 구하면

U=(eiγH)=eiγHU^\dagger=(e^{i\gamma H})^\dagger=e^{-i\gamma H^\dagger}

인데, HH는 에르미트 행렬이므로 HH = HH^\dagger가 성립한다.
따라서 다음과 같은 식이 성립하게 된다.

eiγH=eiγHUU=eiγHeiγH=Ie^{-i\gamma H^\dagger}=e^{-i\gamma H}\quad\Rightarrow U^\dagger U = e^{-i\gamma H}e^{i\gamma H}=\mathbb{I}

그런데 eiγHe^{i\gamma H}와 그 비슷하게 생긴 녀석들은 지수부분에 행렬을 가지고 있는데 행렬로 취급되고 있다.
왜 그렇게 되는지는 테일러 급수의 지수함수로 확장했을 때 명백해진다.
미적분학에서 테일러 급수는 어떤 함수를 무한 차원의 다항식으로 만드는 방법이다.

사실 이 부분에 대해서는 잘 모르겠다.
궁금하다면 문서를 직접 보고 이해해보도록 하자...>->O

아무튼 행렬 지수는 행렬이다.

profile
Peter J Online Space - since July 2020

1개의 댓글

comment-user-thumbnail
2023년 6월 16일

와.. 정말 감탄하고 갑니다. 너무 잘 정리된 글이네요. 감사합니다

답글 달기