양자 머신러닝의 숨은 병목: 데이터를 양자 컴퓨터에 넣기

발행: (2026년 5월 22일 PM 10:30 GMT+9)
11 분 소요

출처: Towards Data Science

  • 고전 신경망이 데이터를 읽는 방식
  • 양자 컴퓨터는 비트를 읽을 수 없다
  • 고전 데이터를 양자 상태에 임베딩하기
  • 양자 머신러닝에서 데이터 로딩 병목 현상
  • 결론

현대 인공지능(AI)과 머신러닝(ML)은 대량의 데이터를 처리하고 그 패턴을 학습하는 데 크게 의존합니다. 일반적으로 모델의 일반화 능력은 사용 가능한 데이터 양이 늘어날수록 향상됩니다. 그러나 고전 머신러닝에서 양자 머신러닝(QML)으로 전환할 때 마주하게 되는 첫 번째 큰 도전 과제는 양자 컴퓨터가 고전 비트를 직접 읽을 수 없다는 점입니다. 어떤 연산도 수행되기 전에 데이터는 반드시 양자 상태(큐비트)로 임베딩되어야 합니다.

처음엔 간단해 보일 수 있지만, 실제로는 놀라울 정도로 어렵습니다. 데이터의 규모와 복잡성이 커질수록 이러한 양자 상태를 준비하는 비용은 지수적으로 증가할 수 있습니다. 현재까지 임의의 고전 데이터를 양자 시스템에 로드하는 보편적으로 효율적인 방법은 알려져 있지 않습니다.

이 글에서는 왜 이러한 문제가 발생하는지 살펴보고, 일반적인 양자 데이터 임베딩 기법들을 검토한 뒤, 연구자들이 이러한 제한을 극복하기 위해 탐구하고 있는 최신 접근법 몇 가지를 논의합니다.

고전 신경망이 데이터를 읽는 방식

신경망(NN)은 현대 머신러닝의 기본 구성 요소 중 하나입니다. 그 성공의 많은 부분은 우리가 대량의 데이터를 수집·저장·처리할 수 있게 된 능력 덕분입니다.

신경망은 본질적으로 데이터를 통해 패턴을 학습하도록 설계된 수학적 시스템입니다. 학습 과정에서 내부 파라미터를 점진적으로 조정하여 데이터를 생성한 관계를 포착합니다. 이를 통해 예측, 생성, 분류와 같은 작업을 수행할 수 있습니다.

예시:

  • 과거 추세를 바탕으로 미래 주가 예측
  • 인간과 유사한 텍스트 생성
  • 이미지에서 객체 식별
  • 다양한 데이터 카테고리 구분

고전 신경망의 가장 큰 강점 중 하나는 유연성입니다. 다양한 종류의 데이터를 처리하고 그 안에 존재하는 관계를 학습할 수 있습니다:

  • 시계열 데이터 → 언어, 금융 시계열, 오디오 신호
  • 공간 데이터 → 이미지, 비디오, 지리 지도
  • 확률적·노이즈가 섞인 데이터 → 센서 측정값, 방사성 붕괴, 실험 관측값

다양한 데이터 유형을 다룰 수 있음에도 불구하고, 신경망은 인간처럼 이미지, 오디오, 텍스트를 직접 “보는” 것이 아닙니다. 내부적으로 모든 입력은 결국 숫자 벡터 또는 텐서 형태로 변환된 뒤 네트워크에 전달됩니다.

예시:

  • 이미지는 픽셀 강도값의 격자로 표현될 수 있음
  • 문장은 토큰 임베딩으로 변환될 수 있음
  • 오디오 신호는 시간에 따라 샘플링된 진폭 시퀀스로 표현될 수 있음

신경망에게는 이 모든 것이 단순히 구조화된 숫자 표현일 뿐입니다.

다양한 데이터 모달리티가 벡터로 표현된 모습. 저자가 Gemini를 사용해 만든 일러스트

양자 컴퓨터는 비트를 읽을 수 없다

양자 컴퓨터는 정보 처리를 완전히 다른 방식으로 수행합니다. 고전 비트가 아니라 양자 비트(큐비트) 를 사용하며, 이는 중첩(superposition)과 얽힘(entanglement) 같은 양자역학 원리를 따릅니다.

고전 비트는 0 또는 1이라는 두 값 중 하나를 갖는 이진값입니다.

반면 큐비트는 두 상태가 동시에 중첩된 형태로 존재할 수 있습니다. 일반적인 큐비트 상태는 다음과 같이 표기됩니다.

[ |\psi\rangle = \alpha |0\rangle + \beta |1\rangle ]

여기서 (\alpha)와 (\beta)는 복소수 확률 진폭이며 (|\alpha|^2 + |\beta|^2 = 1)이라는 제약을 만족합니다.

이러한 개념이 익숙하지 않다면, 제가 쓴 입문자용 양자 컴퓨팅 글을 여기에서 참고하세요. 이번 글에서 중요한 점은 양자 컴퓨터가 정보를 저장하고 처리하는 방식이 고전 컴퓨터와 매우 다르다는 것입니다.

우리는 고전 세계에 살고 있기 때문에 대부분의 데이터는 고전 메모리에 비트 형태로 존재합니다. 양자 프로세서는 이미지, 문장, 오디오 파형 등을 GPU 위에서 동작하는 신경망처럼 직접 읽을 수 없습니다. 양자 연산이 시작되기 전에 이 고전 정보를 큐비트에 인코딩해야 하는데, 이는 생각보다 훨씬 어려운 작업입니다.

고전 데이터를 양자 상태에 임베딩하기

고전 정보를 어떤 방식으로든 양자 상태로 변환해야 합니다. 이 과정을 양자 데이터 임베딩(quantum data embedding) 혹은 양자 상태 준비(quantum state preparation) 라고 합니다. 구현 방법에는 진폭, 위상, 회전 등 여러 가지가 있습니다.

수년에 걸쳐 연구자들은 고전 데이터를 양자 시스템에 임베딩하는 다양한 접근법을 제안했습니다. 가장 널리 사용되는 두 가지 기법은 다음과 같습니다.

  • 각도 기반 인코딩(angle-based encoding)
  • 진폭 기반 인코딩(amplitude encoding)

각 방법은 장점·제한·계산 비용이 서로 다릅니다.

각도 기반 인코딩

가장 간단하고 널리 쓰이는 양자 데이터 임베딩 방법 중 하나가 각도 인코딩(angle encoding), 즉 회전 기반 임베딩(rotation-based embedding) 입니다.

이 방식에서는 고전 특성을 양자 게이트(R‑X, R‑Y, R‑Z 등)를 이용해 큐비트를 회전시키는 각도로 변환합니다. 예를 들어 고전 벡터 (X = [x_1, x_2, x_3]) 를 각각의 특성값에 따라 서로 다른 큐비트를 회전시켜 양자 회로에 임베딩할 수 있습니다.

다음은 PennyLane을 이용한 회전 기반 인코딩의 간단한 구현 예시입니다.

import pennylane as qml
import numpy as np

# Classical input vector
x = np.array([0.2, 0.7, 1.1])

n_qubits = len(x)
dev = qml.device("default.qubit", wires=n_qubits)

@qml.qnode(dev)
def rotational_embedding_circuit(x):
    # Each feature x_i rotates one qubit
    qml.AngleEmbedding(
        features=x,
        wires=range(n_qubits),
        rotation="Y"   # can also be "X" or "Z"
    )

    return qml.state()

state = rotational_embedding_circuit(x)

qml.draw_mpl(rotational_embedding_circuit, style='pennylane_sketch')(x)
print(state)

각 고전 특성이 하나의 큐비트 회전 각도를 제어합니다. 저자가 PennyLane을 사용해 만든 양자 회로

회전 기반 인코딩의 주요 단점은 큐비트 수에 대한 확장성이 매우 낮다는 점입니다. 일반적으로 입력 벡터의 차원 수만큼 큐비트가 필요합니다.

진폭 기반 인코딩

진폭 기반 인코딩(amplitude encoding) 은 고전 데이터를 양자 시스템에 임베딩하는 또 다른 기법입니다. 회전 기반 인코딩이 각 특성을 개별 큐비트 회전으로 매핑한다면, 진폭 인코딩은 정보를 양자 상태의 진폭 자체에 직접 저장합니다. 예를 들어 (|\psi\rangle = \alpha |0\rangle + \beta |1\rangle) 에서 (\alpha, \beta)가 바로 데이터 진폭이 됩니다.

예시:

[ X = [x_1, x_2, x_3, x_4] ]

는 (\log_2(|X|) = 2) 개의 큐비트로 다음과 같이 인코딩될 수 있습니다.

[ |\psi(x)\rangle = x_1|00\rangle + x_2|01\rangle + x_3|10\rangle + x_4|11\rangle ]

이는 앞서 본 회전 기반 인코딩에 비해 훨씬 더 압축된 형태입니다.

특히 진폭 수는 큐비트 수에 따라 지수적으로 증가한다는 점이 양자 컴퓨팅의 가장 매력적인 아이디어 중 하나입니다.

예시:

  • 2 큐비트 → (2^2 = 4) 개의 진폭
  • 10 큐비트 → (2^{
0 조회
Back to Blog

관련 글

더 보기 »