<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>IBM on kenji.blog</title><link>http://kenji.blog/ko/tags/ibm/</link><description>Recent content in IBM on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>ko</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 20:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/ko/tags/ibm/index.xml" rel="self" type="application/rss+xml"/><item><title>Qiskit을 사용한 양자 프로그래밍 초입문</title><link>http://kenji.blog/ko/p/qiskit-quantum-programming-intro/</link><pubDate>Fri, 11 Sep 2026 20:00:00 +0900</pubDate><guid>http://kenji.blog/ko/p/qiskit-quantum-programming-intro/</guid><description>&lt;img src="http://kenji.blog/p/qiskit-quantum-programming-intro/img/eyecatch.jpg" alt="Featured image of post Qiskit을 사용한 양자 프로그래밍 초입문" />&lt;h2 id="1-시작하며">1. 시작하며
&lt;/h2>&lt;p>현대의 컴퓨터(고전 컴퓨터)는 우리의 삶을 극적으로 변화시켰고, 고도의 계산 능력으로 사회의 모든 측면을 지탱하고 있습니다. 그러나 일부 특정 문제(예를 들어, 거대한 수의 소인수분해, 복잡한 분자 구조의 시뮬레이션, 최적화 문제 등)에 있어서는 현재 최첨단 슈퍼컴퓨터라 하더라도 우주의 나이보다 더 긴 시간이 필요할 수 있음이 알려져 있습니다.&lt;/p>
&lt;p>이러한 &amp;lsquo;고전 컴퓨터의 한계&amp;rsquo;를 뛰어넘을 가능성을 비장하고 있는 것이 **양자 컴퓨터(Quantum Computer)**입니다. 양자역학의 신비한 성질(중첩이나 양자 얽힘)을 계산 자원으로 활용함으로써 특정 문제를 극적으로 고속화할 수 있을 것으로 생각됩니다.&lt;/p>
&lt;p>본 기사에서는 IBM이 오픈소스로 제공하는 양자 컴퓨팅 프레임워크인 **Qiskit(키스킷)**을 사용하여 양자 프로그래밍의 세계로 첫걸음을 내딛습니다. 물리나 수학의 기초부터 친절하게 해설하고, 실제로 Python으로 코드를 작성하여 시뮬레이터 상에서 양자 회로를 구동하기까지의 프로세스를 망라한 매우 상세한 입문 가이드입니다.&lt;/p>
&lt;hr>
&lt;h2 id="2-양자-계산을-지탱하는-물리와-수학의-기초">2. 양자 계산을 지탱하는 물리와 수학의 기초
&lt;/h2>&lt;p>양자 프로그래밍을 이해하기 위해서는 먼저 양자역학의 기본적인 개념을 이해할 필요가 있습니다. 여기서는 양자 비트, 중첩, 양자 얽힘이라는 3가지 중요한 기둥에 대해 해설합니다.&lt;/p>
&lt;h3 id="21-고전-비트와-양자-비트qubit">2.1 고전 비트와 양자 비트(Qubit)
&lt;/h3>&lt;p>고전 컴퓨터의 정보 단위는 &amp;lsquo;비트(Bit)&amp;lsquo;입니다. 비트는 항상 &lt;code>0&lt;/code> 또는 &lt;code>1&lt;/code> 중 하나의 상태를 취합니다.&lt;/p>
&lt;p>반면, 양자 컴퓨터 정보의 최소 단위는 **양자 비트(Qubit: Quantum bit)**라고 불립니다. 양자 비트는 &lt;code>0&lt;/code>과 &lt;code>1&lt;/code>의 상태를 취할 수 있을 뿐만 아니라, &lt;strong>그 두 가지 상태를 동시에 유지하는&lt;/strong> 것이 가능합니다.&lt;/p>
&lt;p>수학적으로 양자 비트의 상태 $|\psi\rangle$는 기저 상태 $|0\rangle$과 $|1\rangle$의 선형 결합(중첩)으로 표현됩니다.&lt;/p>
$$
|\psi\rangle = \alpha|0\rangle + \beta|1\rangle
$$
&lt;p>여기서 $\alpha$와 $\beta$는 복소수이며, 각각 상태 $|0\rangle$과 $|1\rangle$이 관측될 확률 진폭을 나타냅니다. 양자역학의 기본 원리에 따라 확률의 합은 1이 되어야 하므로 다음의 규격화 조건을 만족합니다.&lt;/p>
$$
|\alpha|^2 + |\beta|^2 = 1
$$
&lt;p>즉, 이 양자 비트를 &amp;lsquo;측정(관측)&amp;lsquo;했을 때 $|0\rangle$을 얻을 확률은 $|\alpha|^2$, $|1\rangle$을 얻을 확률은 $|\beta|^2$가 됩니다. 측정 전에는 상태가 확률적으로만 결정되어 있다는 점이 고전 비트와의 결정적인 차이입니다.&lt;/p>
&lt;div class="mermaid">graph LR
A["고전 비트 (Classical Bit)"] --> B["확정된 상태: 0 또는 1"]
C["양자 비트 (Qubit)"] --> D["중첩: 0과 1 양쪽 모두"]
D --> E["측정에 의해 확률적으로 상태가 확정"]&lt;/div>
&lt;h3 id="22-중첩superposition">2.2 중첩(Superposition)
&lt;/h3>&lt;p>앞서 언급했듯이, $|0\rangle$과 $|1\rangle$의 상태가 섞여 있는 상태를 **중첩(Superposition)**이라고 부릅니다.&lt;/p>
&lt;p>예를 들어, 1개의 양자 비트가 완전히 균등한 중첩 상태에 있을 경우 $\alpha = \frac{1}{\sqrt{2}}$, $\beta = \frac{1}{\sqrt{2}}$가 됩니다.&lt;/p>
$$
|\psi\rangle = \frac{1}{\sqrt{2}}|0\rangle + \frac{1}{\sqrt{2}}|1\rangle
$$
&lt;p>이 상태를 측정하면 $|0\rangle$과 $|1\rangle$이 각각 50%의 확률로 관측됩니다.
만약 2개의 양자 비트가 있다면, $|00\rangle, |01\rangle, |10\rangle, |11\rangle$의 4가지 상태의 중첩을 만들 수 있습니다. $n$개의 양자 비트가 있다면 $2^n$개의 상태를 동시에 표현할 수 있게 되며, 이것이 양자 컴퓨터의 병렬 처리 능력의 원천 중 하나가 됩니다.&lt;/p>
&lt;h3 id="23-양자-얽힘entanglement">2.3 양자 얽힘(Entanglement)
&lt;/h3>&lt;p>양자 계산에서 가장 강력하고도 신비한 성질이 **양자 얽힘(Entanglement)**입니다. 아인슈타인이 &amp;lsquo;기분 나쁜 원격 작용&amp;rsquo;이라고 불렀던 이 현상은, 2개 이상의 양자 비트가 서로 강하게 결합되어 한쪽 양자 비트의 상태가 결정되면 물리적으로 아무리 떨어져 있더라도 다른 쪽 양자 비트의 상태가 순식간에 결정된다는 성질입니다.&lt;/p>
&lt;p>가장 유명한 양자 얽힘 상태인 &amp;lsquo;벨 상태(Bell State)&amp;rsquo; 중 하나인 $\Phi^+$ 상태는 다음과 같이 표현됩니다.&lt;/p>
$$
|\Phi^+\rangle = \frac{|00\rangle + |11\rangle}{\sqrt{2}}
$$
&lt;p>이 상태에서는 $|01\rangle$이나 $|10\rangle$이라는 상태가 존재하지 않습니다. 따라서 1번째 양자 비트를 측정하여 $|0\rangle$이 나왔을 경우, 2번째 양자 비트를 측정할 것도 없이 확실하게 $|0\rangle$임이 확정됩니다. 반대로 1번째가 $|1\rangle$이라면 2번째도 반드시 $|1\rangle$이 됩니다.&lt;/p>
&lt;hr>
&lt;h2 id="3-양자-논리-게이트quantum-logic-gates">3. 양자 논리 게이트(Quantum Logic Gates)
&lt;/h2>&lt;p>고전 컴퓨터가 AND, OR, NOT 등의 논리 게이트를 사용하여 계산을 수행하는 것처럼, 양자 컴퓨터도 &lt;strong>양자 게이트&lt;/strong>를 사용하여 양자 비트의 상태를 조작합니다. 양자 상태는 벡터이므로 양자 게이트는 그 벡터에 작용하는 &amp;lsquo;유니터리 행렬&amp;rsquo;로 표현됩니다.&lt;/p>
&lt;h3 id="31-파울리-게이트pauli-x-y-z">3.1 파울리 게이트(Pauli-X, Y, Z)
&lt;/h3>&lt;p>파울리 게이트는 1 양자 비트에 대한 기본적인 조작입니다.&lt;/p>
&lt;p>&lt;strong>· Pauli-X 게이트 (NOT 게이트)&lt;/strong>
고전 컴퓨터의 NOT 게이트에 해당합니다. $|0\rangle$을 $|1\rangle$로, $|1\rangle$을 $|0\rangle$로 반전시킵니다. (블로흐 구에서 X축을 기준으로 180도 회전)&lt;/p>
$$
X = \begin{pmatrix} 0 &amp; 1 \\ 1 &amp; 0 \end{pmatrix}
$$
&lt;p>&lt;strong>· Pauli-Y 게이트&lt;/strong>
Y축을 기준으로 180도 회전합니다. 위상과 비트 모두를 반전시키는 효과가 있습니다.&lt;/p>
$$
Y = \begin{pmatrix} 0 &amp; -i \\ i &amp; 0 \end{pmatrix}
$$
&lt;p>&lt;strong>· Pauli-Z 게이트 (위상 반전 게이트)&lt;/strong>
$|0\rangle$의 상태는 그대로 두고, $|1\rangle$ 상태의 위상을 반전($-1$을 곱함)시킵니다. (Z축을 기준으로 180도 회전)&lt;/p>
$$
Z = \begin{pmatrix} 1 &amp; 0 \\ 0 &amp; -1 \end{pmatrix}
$$
&lt;h3 id="32-아다마르-게이트hadamard-gate">3.2 아다마르 게이트(Hadamard Gate)
&lt;/h3>&lt;p>아다마르 게이트(H 게이트)는 확정된 상태($|0\rangle$나 $|1\rangle$)를 중첩 상태로 변환하는 매우 중요한 게이트입니다.&lt;/p>
$$
H = \frac{1}{\sqrt{2}}
\begin{pmatrix}
1 &amp; 1 \\
1 &amp; -1
\end{pmatrix}
$$
&lt;p>$|0\rangle$에 H 게이트를 적용하면 균등한 중첩 상태인 $|+\rangle$이 됩니다.&lt;/p>
$$
H|0\rangle = \frac{1}{\sqrt{2}}|0\rangle + \frac{1}{\sqrt{2}}|1\rangle = |+\rangle
$$
&lt;h3 id="33-위상-게이트phase-gates">3.3 위상 게이트(Phase Gates)
&lt;/h3>&lt;p>위상 게이트는 Z 게이트를 일반화한 것으로, $|1\rangle$ 상태의 위상을 지정된 각도 $\theta$만큼 회전시킵니다.&lt;/p>
$$
P(\theta) = \begin{pmatrix} 1 &amp; 0 \\ 0 &amp; e^{i\theta} \end{pmatrix}
$$
&lt;p>대표적인 것으로 S 게이트($\theta = \pi/2$)나 T 게이트($\theta = \pi/4$)가 있습니다.&lt;/p>
&lt;h3 id="34-cnot-게이트controlled-not-gate">3.4 CNOT 게이트(Controlled-NOT Gate)
&lt;/h3>&lt;p>CNOT 게이트(CX 게이트)는 2개의 양자 비트 간에 조작을 수행하는 게이트로, 양자 얽힘을 생성하기 위해 필수 불가결합니다. &amp;lsquo;제어(Control) 비트&amp;rsquo;와 &amp;lsquo;표적(Target) 비트&amp;rsquo;로 구성됩니다.&lt;/p>
&lt;p>제어 비트가 $|1\rangle$일 경우에만 표적 비트에 X 게이트(NOT 조작)를 적용하고, 제어 비트가 $|0\rangle$일 경우에는 아무것도 하지 않습니다.&lt;/p>
$$
CNOT = \begin{pmatrix}
1 &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; 1 &amp; 0 &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1 \\
0 &amp; 0 &amp; 1 &amp; 0
\end{pmatrix}
$$
&lt;hr>
&lt;h2 id="4-qiskit의-기본과-환경-구축">4. Qiskit의 기본과 환경 구축
&lt;/h2>&lt;p>여기부터는 실제로 Python과 Qiskit을 사용하여 양자 프로그램을 작성해 보겠습니다.&lt;/p>
&lt;h3 id="41-qiskit이란">4.1 Qiskit이란?
&lt;/h3>&lt;p>&lt;strong>Qiskit&lt;/strong>은 IBM Quantum이 개발한 오픈소스 양자 컴퓨팅용 소프트웨어 개발 키트(SDK)입니다. Python을 사용하여 직관적으로 양자 회로를 구축하고 로컬 시뮬레이터나 클라우드를 통해 실제 IBM의 양자 컴퓨터 실기에서 실행할 수 있습니다.&lt;/p>
&lt;h3 id="42-설치-방법">4.2 설치 방법
&lt;/h3>&lt;p>Qiskit을 이용하기 위해서는 Python 환경이 필요합니다. 다음 명령어로 Qiskit과 관련 패키지(시뮬레이터 및 그리기용 라이브러리)를 설치합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip install qiskit qiskit-aer qiskit-ibm-runtime matplotlib pylatexenc
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="43-프로그래밍의-기본-흐름">4.3 프로그래밍의 기본 흐름
&lt;/h3>&lt;p>Qiskit을 사용한 양자 프로그래밍은 주로 다음 단계로 진행됩니다.&lt;/p>
&lt;div class="mermaid">graph TD
A["1. 회로 구축 (Build)"] --> B["2. 컴파일/트랜스파일 (Compile)"]
B --> C["3. 실행 (Execute)"]
C --> D["4. 결과 분석 및 시각화 (Analyze)"]&lt;/div>
&lt;ol>
&lt;li>&lt;strong>회로 구축&lt;/strong>: &lt;code>QuantumCircuit&lt;/code> 객체를 생성하고 게이트를 추가해 나간다.&lt;/li>
&lt;li>&lt;strong>컴파일&lt;/strong>: 실행할 백엔드(실기나 시뮬레이터)에 맞춰 회로를 최적화.&lt;/li>
&lt;li>&lt;strong>실행&lt;/strong>: 백엔드에 작업을 전송하고 결과를 획득.&lt;/li>
&lt;li>&lt;strong>분석&lt;/strong>: 측정 결과의 히스토그램 등을 플롯.&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="5-실전-벨-상태양자-얽힘를-만드는-회로-구축">5. 실전: 벨 상태(양자 얽힘)를 만드는 회로 구축
&lt;/h2>&lt;p>이론에서 배운 &amp;lsquo;양자 얽힘(벨 상태)&amp;lsquo;을 실제로 Qiskit으로 만들어 봅시다. 목표로 하는 상태는 $|\Phi^+\rangle = \frac{|00\rangle + |11\rangle}{\sqrt{2}}$입니다.&lt;/p>
&lt;h3 id="51-회로-설계">5.1 회로 설계
&lt;/h3>&lt;p>벨 상태를 만들려면 다음 절차를 거칩니다.&lt;/p>
&lt;ol>
&lt;li>2개의 양자 비트를 준비한다(초기 상태는 둘 다 $|0\rangle$).&lt;/li>
&lt;li>1번째 양자 비트에 아다마르 게이트(H)를 적용하여 중첩 상태로 만든다.&lt;/li>
&lt;li>1번째 양자 비트를 &amp;lsquo;제어 비트&amp;rsquo;, 2번째 양자 비트를 &amp;lsquo;표적 비트&amp;rsquo;로 하여 CNOT 게이트를 적용한다.&lt;/li>
&lt;li>결과를 읽어내기 위해 측정(Measure)을 수행한다.&lt;/li>
&lt;/ol>
&lt;h3 id="52-pythonqiskit-코드-구현">5.2 Python/Qiskit 코드 구현
&lt;/h3>&lt;p>그러면 실제 코드를 살펴봅시다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">numpy&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">np&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">qiskit&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">QuantumCircuit&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">transpile&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">qiskit_aer&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Aer&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">qiskit.visualization&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">plot_histogram&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">matplotlib.pyplot&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">plt&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. 회로 초기화&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2개의 양자 비트와 2개의 고전 비트를 가지는 양자 회로 생성&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">qc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">QuantumCircuit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. H 게이트 적용&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 양자 비트 0 (q0)에 아다마르 게이트 적용&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">h&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. CNOT 게이트 적용&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># q0을 제어 비트로, q1을 표적 비트로 CNOT 적용&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cx&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 4. 측정&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 양자 비트 0과 1을 측정하여 각각 고전 비트 0과 1에 쓰기&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">measure&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 회로도 그리기 (matplotlib 사용)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># qc.draw(&amp;#39;mpl&amp;#39;)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">draw&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>이 코드를 실행하면 콘솔 상에 아스키 아트로 다음과 같은 양자 회로도가 표시됩니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> ┌───┐ ┌─┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">q_0: ┤ H ├──■──┤M├───
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └───┘┌─┴─┐└╥┘┌─┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">q_1: ─────┤ X ├─╫─┤M├
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └───┘ ║ └╥┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">c: 2/═══════════╩══╩═
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 0 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;code>H&lt;/code>가 아다마르 게이트, &lt;code>■&lt;/code>와 &lt;code>X&lt;/code>의 조합이 CNOT 게이트, &lt;code>M&lt;/code>이 측정을 나타냅니다.&lt;/p>
&lt;h3 id="53-시뮬레이터에서의-실행-및-결과-해석">5.3 시뮬레이터에서의 실행 및 결과 해석
&lt;/h3>&lt;p>다음으로 이 회로를 IBM의 고성능 시뮬레이터 &lt;code>Aer&lt;/code>에서 실행하여 결과를 확인합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Aer 시뮬레이터 백엔드 가져오기&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">simulator&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Aer&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_backend&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;qasm_simulator&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 시뮬레이터용으로 회로 트랜스파일(최적화)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">compiled_circuit&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">transpile&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">qc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">simulator&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 회로 실행(여기서는 1000 샷 실행)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">job&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">simulator&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">run&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">compiled_circuit&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">shots&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">1000&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 결과 가져오기&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">job&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 상태 관측 횟수(카운트) 가져오기&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">counts&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_counts&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">compiled_circuit&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">측정 결과:&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">counts&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 히스토그램 플롯&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># plot_histogram(counts)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># plt.show()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;strong>결과 해석&lt;/strong>&lt;/p>
&lt;p>콘솔의 출력은 다음과 같이 나타날 것입니다.
&lt;code>측정 결과: {'00': 495, '11': 505}&lt;/code>
(※확률은 무작위이므로 실행할 때마다 수치는 약간 변동합니다)&lt;/p>
&lt;p>이상적인 시뮬레이션 환경에서는 측정 결과 &lt;code>00&lt;/code>과 &lt;code>11&lt;/code>이 대략 50%씩 관측되며, &lt;code>01&lt;/code>이나 &lt;code>10&lt;/code>은 전혀 관측되지 않습니다.
이것은 바로 우리가 작성한 벨 상태 $|\Phi^+\rangle = \frac{|00\rangle + |11\rangle}{\sqrt{2}}$의 이론적 예측과 완전히 일치합니다. 1번째 양자 비트가 0이면 2번째도 반드시 0, 1이면 반드시 1이 된다는 &amp;lsquo;양자 얽힘&amp;rsquo;이 정확하게 시뮬레이트된 것입니다.&lt;/p>
&lt;p>참고로 실기 양자 컴퓨터(IBM Quantum Hardware)에서 실행할 경우, 노이즈(양자 결어긋남이나 게이트 오류)의 영향으로 인해 드물게 &lt;code>01&lt;/code>이나 &lt;code>10&lt;/code>이 관측될 수도 있습니다. 이 노이즈를 어떻게 줄일 것인가(양자 오류 정정)가 현재 양자 컴퓨터 개발의 가장 큰 과제 중 하나입니다.&lt;/p>
&lt;hr>
&lt;h2 id="6-더-고도화된-알고리즘으로의-스케일업">6. 더 고도화된 알고리즘으로의 스케일업
&lt;/h2>&lt;p>벨 상태의 생성은 양자 프로그래밍의 &amp;lsquo;Hello World&amp;rsquo;라고도 할 수 있습니다. 이를 바탕으로 더욱 발전시킴으로써 고전 컴퓨터를 능가하는 강력한 알고리즘을 구축할 수 있습니다.&lt;/p>
&lt;h3 id="61-도이치-조사-알고리즘deutsch-jozsa-algorithm">6.1 도이치-조사 알고리즘(Deutsch-Jozsa Algorithm)
&lt;/h3>&lt;p>주어진 함수 $f(x)$가 &amp;lsquo;상수 함수(입력에 상관없이 항상 0 또는 항상 1을 출력)&amp;lsquo;인지 &amp;lsquo;균형 함수(입력의 절반에 대해 0, 나머지 절반에 대해 1을 출력)&amp;lsquo;인지 판정하는 문제입니다.
고전 컴퓨터에서는 최악의 경우 $2^{n-1} + 1$번의 함수 평가가 필요하지만, 도이치-조사 알고리즘을 사용하면 양자의 병렬성을 이용하여 &lt;strong>단 1번의 평가&lt;/strong>만으로 판정할 수 있습니다. 이는 중첩 상태를 입력하고 간섭(Interference)을 이용해 불필요한 상태를 상쇄하여 원하는 답을 증폭시키는 양자 알고리즘의 기본 패턴을 보여줍니다.&lt;/p>
&lt;h3 id="62-그로버의-알고리즘grovers-algorithm">6.2 그로버의 알고리즘(Grover&amp;rsquo;s Algorithm)
&lt;/h3>&lt;p>정렬되지 않은 $N$개의 데이터베이스에서 특정 데이터를 찾는 검색 문제에 있어, 고전 알고리즘이 평균 $N/2$번의 계산을 요구하는 반면 그로버의 알고리즘은 $\sqrt{N}$번 만에 원하는 데이터를 찾아낼 수 있습니다.
이 알고리즘은 &amp;lsquo;오라클(Oracle)&amp;lsquo;이라 불리는 블랙박스를 사용하여 목적 해의 위상을 반전시키고, 나아가 &amp;lsquo;진폭 증폭(Amplitude Amplification)&amp;lsquo;을 수행함으로써 목적 해가 관측될 확률을 극적으로 높입니다.&lt;/p>
&lt;div class="mermaid">graph TD
A["초기화 (모든 상태의 중첩)"] --> B["오라클 (정답의 위상을 반전)"]
B --> C["확산 연산자 (평균값 기준 반전에 의한 진폭 증폭)"]
C --> D{"충분한 확률에 도달했는가?"}
D -- "No" --> B
D -- "Yes" --> E["측정"]&lt;/div>
&lt;hr>
&lt;h2 id="7-마무리-및-향후-학습">7. 마무리 및 향후 학습
&lt;/h2>&lt;p>이 기사에서는 양자 컴퓨팅의 근본적인 개념인 중첩과 양자 얽힘에서 시작하여, Qiskit을 이용한 양자 논리 게이트의 조작, 그리고 실제로 벨 상태를 구축하고 시뮬레이션하여 결과를 해석하기까지 자세히 해설했습니다.&lt;/p>
&lt;p>Qiskit은 Python이라는 친숙한 언어로 작성할 수 있어 수학적, 물리적인 장벽을 넘어 알고리즘 구축에 집중할 수 있게 해주는 강력한 도구입니다. 양자 컴퓨터는 현재 노이즈를 동반하는 중간 규모 양자 장치(NISQ: Noisy Intermediate-Scale Quantum) 시대에 접어들었지만, 기계 학습(Quantum Machine Learning), 화학 시뮬레이션(Quantum Chemistry), 암호 해독 등 수많은 분야에서의 응용 연구가 전 세계적으로 빠르게 진행되고 있습니다.&lt;/p>
&lt;p>부디 이번 기회에 Qiskit을 사용하여 다양한 양자 회로를 직접 만들고, 실제 IBM Quantum 프로세서에서 구동해 보시길 바랍니다. 미래의 컴퓨팅 패러다임을 직접 체험할 수 있을 것입니다.&lt;/p>
&lt;h3 id="참고-자료">참고 자료
&lt;/h3>&lt;ul>
&lt;li>&lt;a class="link" href="https://qiskit.org/documentation/" target="_blank" rel="noopener"
>Qiskit 공식 문서&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://qiskit.org/textbook/ja/preface.html" target="_blank" rel="noopener"
>Qiskit Textbook&lt;/a> - 수학적 배경이나 알고리즘을 더 깊이 배우고 싶은 분들에게 추천하는 공식 텍스트&lt;/li>
&lt;li>IBM Quantum Learning&lt;/li>
&lt;/ul>
&lt;p>양자의 세계로 오신 것을 환영합니다!&lt;/p></description></item><item><title>양자 우월성이란 무엇인가? Google과 IBM의 최신 동향</title><link>http://kenji.blog/ko/p/what-is-quantum-supremacy-google-ibm/</link><pubDate>Fri, 11 Sep 2026 18:00:00 +0900</pubDate><guid>http://kenji.blog/ko/p/what-is-quantum-supremacy-google-ibm/</guid><description>&lt;img src="http://kenji.blog/p/what-is-quantum-supremacy-google-ibm/img/eyecatch.jpg" alt="Featured image of post 양자 우월성이란 무엇인가? Google과 IBM의 최신 동향" />&lt;h2 id="1-머리말-양자-컴퓨팅의-여명과-양자-우월성">1. 머리말: 양자 컴퓨팅의 여명과 &amp;lsquo;양자 우월성&amp;rsquo;
&lt;/h2>&lt;p>양자 컴퓨팅은 물리학의 근본 원리인 양자역학을 정보 처리에 응용함으로써, 고전 컴퓨터(현재 우리가 일상적으로 사용하는 PC나 슈퍼컴퓨터)로는 현실적인 시간 내에 풀 수 없는 복잡한 문제를 해결할 가능성을 품고 있습니다. 이 분야는 오랫동안 이론적인 연구가 주를 이루었으나, 최근 하드웨어의 급속한 진보로 실용화를 향한 경쟁이 격화되고 있습니다.&lt;/p>
&lt;p>그 중에서도 가장 큰 주목을 받은 키워드 중 하나가 &amp;lsquo;양자 우월성(Quantum Supremacy)&amp;lsquo;입니다. 이는 특정 계산 작업에서 양자 컴퓨터가 고전 컴퓨터를 압도하는 계산 능력을 보여주는 순간을 의미합니다. 본 기사에서는 양자 우월성의 엄밀한 정의를 시작으로, 2019년 세계 최초로 이 마일스톤에 도달했다고 발표한 Google의 &amp;lsquo;Sycamore(시카모어)&amp;rsquo; 프로세서의 실험 세부 내용, 이에 대한 IBM의 반론과 독자적인 접근법, 그리고 진정한 실용화를 위한 가장 큰 장벽인 &amp;lsquo;양자 오류 정정(Quantum Error Correction: QEC)&amp;lsquo;과 &amp;lsquo;결함 허용 양자 컴퓨팅(Fault-Tolerant Quantum Computing: FTQC)&amp;lsquo;을 향한 최신 로드맵에 대해 기술적이고 수학적으로 깊이 있게 해설합니다.&lt;/p>
&lt;hr>
&lt;h2 id="2-이론적-배경-양자-계산의-기초와-복잡도-클래스">2. 이론적 배경: 양자 계산의 기초와 복잡도 클래스
&lt;/h2>&lt;p>양자 우월성을 이해하기 위해서는 먼저 양자 계산의 수학적 기초와 계산 복잡도 이론에서의 위치를 이해해야 합니다.&lt;/p>
&lt;h3 id="양자-비트와-중첩">양자 비트와 중첩
&lt;/h3>&lt;p>고전 컴퓨터에서 정보의 최소 단위는 비트(0 또는 1)이지만, 양자 컴퓨터에서는 양자 비트(Qubit, 큐비트)를 사용합니다. 1개의 양자 비트 상태 $|\psi\rangle$ 는 기저 상태 $|0\rangle$ 와 $|1\rangle$ 의 복소 선형 결합으로 표현됩니다.&lt;/p>
$$
|\psi\rangle = \alpha|0\rangle + \beta|1\rangle
$$
&lt;p>여기서 $\alpha, \beta \in \mathbb{C}$ 이며, 규격화 조건 $|\alpha|^2 + |\beta|^2 = 1$ 을 만족합니다. 이 성질을 &amp;lsquo;중첩(Superposition)&amp;lsquo;이라고 부릅니다.&lt;/p>
&lt;h3 id="얽힘entanglement과-텐서곱">얽힘(Entanglement)과 텐서곱
&lt;/h3>&lt;p>여러 양자 비트가 존재할 경우, 시스템 전체의 상태는 개별 양자 비트 상태 공간의 텐서곱으로 표현됩니다. $n$ 양자 비트 시스템은 $2^n$ 차원의 힐베르트 공간 $\mathcal{H}^{\otimes n}$ 상의 벡터가 됩니다.&lt;/p>
$$
|\Psi\rangle = \sum_{x \in \{0, 1\}^n} c_x |x\rangle
$$
&lt;p>여기서 $\sum |c_x|^2 = 1$ 입니다. 양자 비트들이 독립적이지 않고 한쪽의 상태가 다른 쪽에 의존하는 상태를 &amp;lsquo;양자 얽힘(Quantum Entanglement)&amp;lsquo;이라고 부릅니다. 이를 통해 양자 컴퓨터는 지수함수적으로 방대한 상태 공간을 동시에 처리할 수 있는 잠재력을 갖게 됩니다.&lt;/p>
&lt;h3 id="양자-우월성의-계산-복잡도-이론적-정의">양자 우월성의 계산 복잡도 이론적 정의
&lt;/h3>&lt;p>계산 복잡도 이론에서 고전 컴퓨터가 효율적으로(다항 시간 내에) 풀 수 있는 문제의 클래스를 &lt;strong>BPP&lt;/strong>(Bounded-error Probabilistic Polynomial time)라고 부릅니다. 반면, 양자 컴퓨터가 효율적으로 풀 수 있는 문제의 클래스는 &lt;strong>BQP&lt;/strong>(Bounded-error Quantum Polynomial time)입니다.&lt;/p>
&lt;p>양자 우월성의 실증이란, &amp;ldquo;BQP에는 포함되지만 BPP에는 포함되지 않는(혹은 그럴 가능성이 매우 높은) 특정 작업을 실제 양자 하드웨어에서 실행하여, 고전 슈퍼컴퓨터에 의한 시뮬레이션을 시간적·자원적으로 능가하는 것&amp;quot;을 의미합니다. 확장된 처치-튜링 명제(&amp;ldquo;모든 물리적으로 실현 가능한 계산 모델은 확률적 튜링 기계에 의해 다항 시간 내에 시뮬레이션할 수 있다&amp;rdquo;)를 물리적인 실험을 통해 반증하는 역사적인 시도라고 할 수 있습니다.&lt;/p>
&lt;hr>
&lt;h2 id="3-2019년-google에-의한-양자-우월성-실증">3. 2019년: Google에 의한 양자 우월성 실증
&lt;/h2>&lt;p>2019년 10월, Google Quantum AI 팀은 과학 저널 『Nature』를 통해 53 양자 비트의 초전도 프로세서 &amp;lsquo;Sycamore(시카모어)&amp;lsquo;를 사용하여 양자 우월성을 달성했다고 발표했습니다.&lt;/p>
&lt;h3 id="sycamore-프로세서의-아키텍처">Sycamore 프로세서의 아키텍처
&lt;/h3>&lt;p>Sycamore 프로세서는 2차원 격자 형태로 배치된 54개의 트랜스몬(Transmon)형 초전도 양자 비트로 구성되어 있습니다(실험에서는 1개가 오작동하여 53개를 사용). 인접한 양자 비트 사이에는 가변 결합기(Tunable Coupler)가 배치되어 고속이며 고정밀도인 2 양자 비트 게이트(iSWAP 게이트와 제어 Z 게이트의 하이브리드)를 구현했습니다.&lt;/p>
&lt;div class="mermaid">graph TD
A["양자 알고리즘 입력"] --> B["Sycamore 프로세서 (53 Qubits)"]
B --> C["무작위 양자 게이트 적용"]
C --> D["양자 상태 측정 (비트열)"]
D --> E["교차 엔트로피 벤치마킹 (XEB)"]
E --> F["양자 우월성 검증"]&lt;/div>
&lt;h3 id="무작위-양자-회로-샘플링random-circuit-sampling-rcs">무작위 양자 회로 샘플링(Random Circuit Sampling: RCS)
&lt;/h3>&lt;p>Google이 선택한 작업은 &amp;lsquo;무작위 양자 회로 샘플링&amp;rsquo;입니다. 이는 무작위로 선택된 단일 양자 비트 게이트와 2 양자 비트 게이트를 여러 사이클(깊이 $m$)에 걸쳐 적용하고, 최종 상태를 측정하여 얻어지는 비트열의 확률 분포에서 샘플링을 수행하는 것입니다.&lt;/p>
&lt;p>이상적인(노이즈가 없는) 무작위 양자 회로에서 출력되는 비트열 $x$ 의 확률은 균일 분포가 아니라 포터-토마스 분포(Porter-Thomas distribution)라고 불리는 간섭무늬와 같은 패턴을 보여줍니다. 고전 컴퓨터로 이 분포에서 샘플링을 하려면 상태 벡터 전체의 시뮬레이션이 필요하며, 계산량은 양자 비트 수 $n$ 과 회로의 깊이 $m$ 에 대해 지수함수적으로 증가합니다.&lt;/p>
&lt;h3 id="충실도fidelity-평가-선형-교차-엔트로피-벤치마크xeb">충실도(Fidelity) 평가: 선형 교차 엔트로피 벤치마크(XEB)
&lt;/h3>&lt;p>실험 결과가 단순한 노이즈가 아니라 실제로 양자 계산이 이루어진 결과임을 증명하기 위해, Google은 선형 교차 엔트로피 벤치마크(Linear Cross-Entropy Benchmarking: XEB)를 사용했습니다. 실험에서 얻은 비트열 $x_i$ 에 대한 회로의 이상적인 확률 $P(x_i)$ 를 고전 컴퓨터로 계산하고, 다음 식을 통해 충실도 $\mathcal{F}_{\text{XEB}}$ 를 구합니다.&lt;/p>
$$
\mathcal{F}_{\text{XEB}} = 2^n \langle P(x_i) \rangle_{i} - 1
$$
&lt;p>$\mathcal{F}_{\text{XEB}}$ 가 0이면 완전한 노이즈, 1이면 노이즈가 없는 이상적인 양자 프로세서를 의미합니다. Sycamore 프로세서는 깊이 20의 회로에서 $\mathcal{F}_{\text{XEB}} \approx 0.002$ (0.2%)를 달성했습니다. 언뜻 낮아 보이지만 통계적으로 유의미한 0 이상의 값이며, $2^{53} \approx 9 \times 10^{15}$ 의 상태 공간을 제어한 경이적인 성과였습니다.&lt;/p>
&lt;p>전체 오류율은 개별 게이트 오류, 측정 오류 등의 곱으로 근사적으로 모델링되었습니다.&lt;/p>
$$
\mathcal{F} \approx (1 - e_1)^{N_1}(1 - e_2)^{N_2} \cdots \approx \prod_{g \in 1Q} (1 - e_g) \prod_{g \in 2Q} (1 - e_g) \prod_{q} (1 - e_{RO})
$$
&lt;p>(※ $e_g$ 는 게이트 오류, $e_{RO}$ 는 측정 오류)&lt;/p>
&lt;p>Google은 이 회로를 고전 슈퍼컴퓨터(Summit)로 시뮬레이션하려면 약 1만 년이 걸릴 것이라고 주장했습니다. 반면, Sycamore는 불과 200초 만에 샘플링을 완료했습니다.&lt;/p>
&lt;hr>
&lt;h2 id="4-ibm의-반론-우월성에서-유용성utility으로">4. IBM의 반론: &amp;lsquo;우월성&amp;rsquo;에서 &amp;lsquo;유용성(Utility)&amp;lsquo;으로
&lt;/h2>&lt;p>Google의 발표는 전 세계에 충격을 주었지만, 세계 최대의 슈퍼컴퓨터 &amp;lsquo;Summit&amp;rsquo;을 개발하고 스스로도 양자 컴퓨터 개발을 선도하는 IBM은 즉각적으로 이 주장에 반론을 제기하는 논문을 공개했습니다.&lt;/p>
&lt;h3 id="텐서-네트워크-축약을-통한-고전-시뮬레이션의-개선">텐서 네트워크 축약을 통한 고전 시뮬레이션의 개선
&lt;/h3>&lt;p>IBM 반론의 핵심은 &amp;lsquo;고전 컴퓨터 측의 알고리즘과 자원 최적화가 불충분하다&amp;rsquo;는 점에 있었습니다. Google은 슈뢰딩거 방정식의 시간 발전을 그대로 계산하는 상태 벡터 시뮬레이터를 전제로 1만 년이라는 추정치를 제시했지만, IBM은 &amp;lsquo;텐서 네트워크(Tensor Network)&amp;lsquo;라는 기법을 사용하면 시뮬레이션 시간을 획기적으로 단축할 수 있다고 지적했습니다.&lt;/p>
&lt;p>텐서 네트워크에서는 양자 회로의 게이트 조작을 다차원 배열(텐서) 연산으로 표현하고 네트워크의 &amp;lsquo;축약(Contraction)&amp;rsquo; 순서를 최적화합니다. 게다가 Summit이 가진 250 PB라는 거대한 스토리지(디스크와 메모리의 계층화)를 최대한 활용하면 상태 벡터 전체를 유지하면서 단 &amp;lsquo;2.5일&amp;rsquo; 만에 더 높은 정밀도의 시뮬레이션이 가능하다고 주장했습니다.&lt;/p>
&lt;h3 id="quantum-advantage와-quantum-utility">Quantum Advantage와 Quantum Utility
&lt;/h3>&lt;p>이 논쟁을 계기로 업계 전체의 트렌드는 단순히 &amp;lsquo;고전적으로는 불가능한 인공적 작업을 실행하는 것(Supremacy)&amp;lsquo;에 대한 집착에서, &amp;lsquo;실제 사회의 유용한 문제에 대해 고전적인 접근법보다 실질적인 우위성을 보여주는 것(Quantum Advantage)&amp;rsquo;, 나아가 &amp;lsquo;양자 컴퓨터가 과학적 발견의 새로운 도구로서 기능하는 것(Quantum Utility)&amp;lsquo;이라는 단계로 이행해 갔습니다.&lt;/p>
&lt;p>IBM 자체는 &amp;lsquo;우월성&amp;rsquo;이라는 단어를 피하고, 양자 프로세서의 종합적인 성능 지표로서 &amp;lsquo;양자 볼륨(Quantum Volume)&amp;lsquo;이나 &amp;lsquo;CLOPS (Circuit Layer Operations Per Second)&amp;lsquo;를 제창하며 하드웨어의 규모와 품질의 균형을 중시하는 개발을 진행하고 있습니다.&lt;/p>
&lt;div class="mermaid">timeline
title "양자 마일스톤의 진화"
2019 : "Google Sycamore (53Q)" : "양자 우월성 발표"
2019 : "IBM의 반론" : "2.5일 만의 Summit 슈퍼컴퓨터 시뮬레이션"
2021 : "IBM Eagle (127Q)" : "100 큐비트 장벽 돌파"
2022 : "IBM Osprey (433Q)" : "프로세서 규모의 확장"
2023 : "Google 표면 부호" : "오류 정정 스케일링 (d=3에서 d=5로)"
2023 : "IBM Quantum Utility" : "127Q를 이용한 복잡한 스핀 모델 시뮬레이션"
2024 : "그 이후" : "논리 양자 비트 및 오류 완화의 시대"&lt;/div>
&lt;hr>
&lt;h2 id="5-다음-프론티어-오류-완화error-mitigation와-양자-오류-정정qec">5. 다음 프론티어: 오류 완화(Error Mitigation)와 양자 오류 정정(QEC)
&lt;/h2>&lt;p>현재의 양자 컴퓨터는 &amp;lsquo;NISQ(Noisy Intermediate-Scale Quantum)&amp;lsquo;라고 불리며, 노이즈(외부 환경과의 상호작용이나 제어의 불완전성으로 인한 오류)의 영향을 받기 쉬워 긴 계산을 수행하면 결과가 노이즈에 묻혀버립니다. 이 문제를 극복하기 위한 접근법에는 크게 &amp;lsquo;오류 완화(Error Mitigation)&amp;lsquo;와 &amp;lsquo;양자 오류 정정(Quantum Error Correction)&amp;rsquo; 두 가지가 있습니다.&lt;/p>
&lt;h3 id="오류-완화error-mitigation">오류 완화(Error Mitigation)
&lt;/h3>&lt;p>오류 완화는 양자 하드웨어를 변경하지 않고 고전적인 후처리를 통해 계산 결과의 기댓값에서 노이즈의 영향을 제거하는 기법입니다. IBM은 2023년 127 양자 비트의 &amp;lsquo;Eagle&amp;rsquo; 프로세서와 &amp;lsquo;영점 노이즈 외삽(Zero-Noise Extrapolation: ZNE)&amp;rsquo; 등의 오류 완화 기술을 결합하여, 복잡한 이징 모델의 시간 발전 시뮬레이션에서 최첨단 근사 텐서 네트워크 방법을 뛰어넘는 정확도를 달성하며 &amp;lsquo;Quantum Utility(양자 유용성)&amp;lsquo;를 실증했습니다.&lt;/p>
&lt;h3 id="양자-오류-정정qec과-논리-양자-비트">양자 오류 정정(QEC)과 논리 양자 비트
&lt;/h3>&lt;p>그러나 궁극적으로 임의의 복잡한 알고리즘(예를 들어 Shor의 소인수분해 알고리즘이나 복잡한 양자 화학 계산)을 실행하기 위해서는 오류 완화만으로는 불충분하며, 오류를 동적으로 감지하고 정정하는 &amp;lsquo;양자 오류 정정(QEC)&amp;lsquo;이 필수적입니다.&lt;/p>
&lt;p>QEC의 주류 접근법이 &amp;lsquo;표면 부호(Surface Code)&amp;lsquo;입니다. 이는 여러 물리 양자 비트(데이터 양자 비트)를 2차원 격자 형태로 배치하고, 그 사이에 측정용 양자 비트(앤실라 양자 비트)를 배치하여 &amp;lsquo;안정자(Stabilizer)&amp;lsquo;라고 불리는 패리티 검사를 연속적으로 수행하는 기법입니다.&lt;/p>
&lt;div class="mermaid">graph LR
Q1["데이터 큐비트 (Data)"] --- M1["X 안정자 측정 (Ancilla)"]
Q2["데이터 큐비트 (Data)"] --- M1
Q3["데이터 큐비트 (Data)"] --- M2["Z 안정자 측정 (Ancilla)"]
Q4["데이터 큐비트 (Data)"] --- M2
M1 --> EC["오류 신드롬 디코딩 (Classical)"]
M2 --> EC
EC --> LQ["논리 양자 상태 업데이트"]&lt;/div>
&lt;h4 id="임계값-정리threshold-theorem와-거리-d">임계값 정리(Threshold Theorem)와 거리 $d$
&lt;/h4>&lt;p>양자 오류 정정에는 &amp;lsquo;임계값 정리&amp;rsquo;가 존재합니다. 물리 양자 비트의 오류율 $p$ 가 특정 임계값 $p_{th}$ (표면 부호의 경우 약 1% 내외)를 밑도는 경우, 부호 거리(Distance) $d$ 를 늘림으로써(더 많은 물리 양자 비트를 1개의 논리 양자 비트에 할당함으로써) 논리 오류율 $p_L$ 을 지수함수적으로 낮출 수 있습니다.&lt;/p>
&lt;p>논리 오류율의 근사식은 다음과 같이 표현됩니다.&lt;/p>
$$
p_L \approx \Lambda \left( \frac{p}{p_{th}} \right)^{\frac{d+1}{2}}
$$
&lt;p>여기서 $\Lambda$ 는 상수입니다. $p &lt; p_{th}$ 라면 $d$ 를 키울수록 $p_L$ 은 작아집니다. 그러나 $p > p_{th}$ 인 경우, 물리 양자 비트를 늘릴수록 오히려 노이즈가 축적되어 논리 오류율이 악화되고 맙니다.&lt;/p>
&lt;h4 id="google의-2023년-마일스톤-거리-확장을-통한-오류-감소-실증">Google의 2023년 마일스톤: 거리 확장을 통한 오류 감소 실증
&lt;/h4>&lt;p>2023년 2월, Google은 『Nature』에 기념비적인 논문을 발표했습니다. 그들은 3세대 Sycamore 프로세서를 사용하여 표면 부호의 거리를 $d=3$(17 물리 양자 비트 사용)에서 $d=5$(49 물리 양자 비트 사용)로 확장했을 때, 논리 오류율이 3.028%에서 2.914%로 미세하게 감소하는 것을 세계 최초로 실증한 것입니다.&lt;/p>
&lt;p>이는 $p &lt; p_{th}$ 영역에 발을 들여놓았음을 의미하며, 물리 양자 비트를 늘리면 늘릴수록 성능이 향상된다는, FTQC를 향한 가장 중요한 원리 증명(Proof of Concept)이 완료되었음을 보여줍니다.&lt;/p>
&lt;hr>
&lt;h2 id="6-ftqc결함-허용-양자-컴퓨팅를-향한-로드맵과-전망">6. FTQC(결함 허용 양자 컴퓨팅)를 향한 로드맵과 전망
&lt;/h2>&lt;p>Google과 IBM은 각각 다른 아키텍처와 접근법을 채택하면서도, 최종 목표인 FTQC(Fault-Tolerant Quantum Computing)를 향해 치열한 개발 경쟁을 벌이고 있습니다.&lt;/p>
&lt;h3 id="ibm의-접근법-모듈화와-헤비-헥스-격자">IBM의 접근법: 모듈화와 헤비 헥스 격자
&lt;/h3>&lt;p>IBM은 오류율을 철저히 낮추는 것과 병행하여 프로세서의 스케일업에 주력하고 있습니다. &amp;lsquo;Eagle(127Q)&amp;rsquo;, &amp;lsquo;Osprey(433Q)&amp;rsquo;, &amp;lsquo;Condor(1121Q)&amp;lsquo;로 단일 칩의 한계에 도전하는 한편, &amp;lsquo;Quantum System Two&amp;rsquo;라는 모듈형 아키텍처를 발표했습니다. 또한 양자 비트의 결합 토폴로지에는 불필요한 크로스토크를 줄이고 안정성을 높이는 &amp;lsquo;헤비 헥스(Heavy-Hex) 격자&amp;rsquo;를 채택하고 있습니다. IBM의 전략은 단기적으로는 고도화된 오류 완화로 유용성을 추구하면서 단계적으로 QEC를 도입해 나가는 하이브리드 접근법입니다.&lt;/p>
&lt;h3 id="google의-접근법-논리-양자-비트의-품질-향상">Google의 접근법: 논리 양자 비트의 품질 향상
&lt;/h3>&lt;p>Google의 전략은 물리 양자 비트의 수를 급격히 늘리기보다는 1개의 논리 양자 비트 오류율을 극한까지 낮추는(예를 들어 $10^{-6}$ 까지 낮추는) 데 중점을 두고 있습니다. 그 바탕 위에 모듈 간 양자 상태를 전송하는 기술(Quantum Interconnects)을 확립하여, 수천~수만 개의 물리 양자 비트를 병렬로 동작시키는 대규모 시스템을 목표로 하고 있습니다.&lt;/p>
&lt;p>매직 상태 증류(Magic State Distillation) 등 비클리포드 게이트를 결함 허용적으로 실행하기 위한 프로토콜 구현도 앞으로의 큰 기술적 장애물이 됩니다. 실용적인 Shor의 알고리즘을 실행하여 2048비트의 RSA 암호를 해독하려면 오류율 $10^{-8}$ 이하의 논리 양자 비트가 수천 개, 물리 양자 비트로 환산하면 수백만~수천만 개가 필요하다고 알려져 있어 아직 갈 길이 멉니다.&lt;/p>
&lt;hr>
&lt;h2 id="7-맺음말">7. 맺음말
&lt;/h2>&lt;p>&amp;lsquo;양자 우월성&amp;rsquo;은 양자 컴퓨터 역사상 계산기의 이론적 잠재력을 물리적으로 증명한 중요한 마일스톤이었습니다. Google이 2019년에 보여준 실증과 IBM의 건설적인 반론은 업계 전체를 단순한 이론적 증명에서 벗어나, 실제 유용성(Utility)의 추구, 그리고 최종적인 결함 허용 양자 컴퓨팅(FTQC)을 향한 본격적인 엔지니어링 시대로 밀어 올렸습니다.&lt;/p>
&lt;p>현재 우리는 노이즈투성이인 NISQ 장치에서 오류 정정 기능을 갖춘 논리 양자 비트 장치로 넘어가는 과도기에 서 있습니다. 앞으로 몇 년에서 십 년 사이에 새로운 재료 과학의 발견, 신약 개발 프로세스의 혁명, 그리고 최적화 문제의 돌파구가 이러한 양자 하드웨어의 진화와 함께 현실이 될 것입니다.&lt;/p>
&lt;p>미래의 컴퓨터 과학을 형성해 나갈 Google과 IBM, 그리고 전 세계 연구자들의 동향에서 앞으로도 눈을 뗄 수 없습니다.&lt;/p></description></item></channel></rss>