Yangja Wiki / 실무적 응용

양자컴퓨터 실사용 - Quantum Machine Learning

QML은 양자회로를 머신러닝 모델의 일부로 쓰는 영역입니다. 핵심은 데이터 인코딩, 회로 표현력, 측정 가능한 출력, 학습 안정성입니다.

대표 형태

형태설명
quantum kernel양자 feature map으로 kernel matrix를 계산
variational classifierpQC 출력 기대값을 분류 점수로 사용
data re-uploading같은 데이터를 여러 층에 반복 주입
hybrid model고전 신경망 일부와 양자회로를 연결

필요한 머신러닝 배경

중간학년 학부 수준에서는 QML을 “새로운 최적화 마법”이 아니라 feature map과 모델 class의 문제로 보는 편이 좋습니다. 고전 ML에서 모델은 데이터를 어떤 feature 공간으로 보낸 뒤, 그 공간에서 분류나 회귀를 합니다.

$$
x\mapsto \phi(x),
\qquad
y\approx f(\phi(x))
$$

QML에서는 이 feature 공간이 양자상태 공간입니다.

$$
x\mapsto |\phi(x)\rangle
$$

양자상태 공간은 텐서곱으로 커지고, 얽힘과 간섭을 포함합니다. 그래서 특정 데이터 구조에서는 고전 feature map과 다른 geometry를 만들 수 있다는 기대가 있습니다. 하지만 이 기대가 실제 성능 향상으로 이어지는지는 데이터, 회로, noise, baseline 비교에 달려 있습니다.

Feature map

고전 데이터 x를 양자상태로 넣는 회로를 feature map이라고 합니다.

$$
|\phi(x)\rangle=U_\phi(x)|0^n\rangle
$$

예를 들어 각 feature를 회전각으로 넣을 수 있습니다.

$$
U_\phi(x)=\bigotimes_j R_y(x_j)
$$

데이터 인코딩이 약하면 모델이 배울 수 있는 함수도 약합니다. 반대로 너무 복잡한 feature map은 회로가 깊어지고 noise에 취약해집니다.

데이터 인코딩 방식

방식형태감각
basis encodingx\mapsto |x\rangle이산 bitstring 데이터에 직관적
angle encodingx_j\mapsto R_y(x_j)구현이 쉽고 NISQ에 적합
amplitude encodingx\mapsto \sum_j x_j|j\rangle표현은 압축적이지만 상태 준비가 비쌀 수 있음
Hamiltonian encodinge^{-iH(x)t}물리 모델 기반 feature map에 적합

실사용에서는 amplitude encoding의 “적은 큐비트로 큰 벡터 표현”이라는 말에 바로 끌리면 위험합니다. 고전 데이터를 그 상태로 올리는 비용이 문제 전체를 지배할 수 있습니다.

Quantum kernel

양자 kernel은 두 데이터의 feature state overlap입니다.

$$
K(x,x')=|\langle\phi(x)|\phi(x')\rangle|^2
$$

회로로는 U_\phi^\dagger(x')U_\phi(x)를 적용한 뒤 |0^n\rangle 확률을 측정하는 방식이 흔합니다.

$$
K(x,x')=\Pr(0^n)
$$

kernel 방식은 학습 파라미터가 적어 barren plateau 문제는 덜하지만, 데이터 개수 N에 대해 kernel matrix 계산이 O(N^2)입니다.

Kernel이 보는 것

kernel 값이 크다는 것은 두 데이터가 양자 feature space에서 비슷한 상태로 간다는 뜻입니다. 분류 문제에서는 같은 class의 데이터끼리 kernel이 크고, 다른 class끼리는 작기를 기대합니다.

여기서 양자컴퓨터의 역할은 overlap을 회로 실행으로 추정하는 것입니다. 만약 이 feature map이 고전적으로 쉽게 계산 가능한 kernel과 다르지 않다면, 굳이 양자장비를 쓸 이유가 약합니다. QML의 핵심 질문은 “양자 feature map이 고전 baseline보다 의미 있는 geometry를 제공하는가”입니다.

Variational classifier

분류 모델은 보통 기대값을 logit처럼 사용합니다.

$$
\hat y(x;\theta)=\langle Z_0\rangle_{x,\theta}
$$

이 값을 sigmoid나 threshold로 바꿔 이진 분류를 할 수 있습니다. 다중분류는 여러 observable을 측정하거나 여러 회로 출력을 사용합니다.

PennyLane 같은 프레임워크는 자동미분과 연결되어 이런 hybrid model을 쉽게 작성하게 해줍니다. 다만 실제 hardware shots가 들어가면 gradient와 loss가 noisy해집니다.

Data re-uploading

큐비트 수가 적을 때는 같은 데이터를 여러 층에 반복 주입합니다.

$$
U(x,\theta)=\prod_{\ell=1}^{L}U_{\theta_\ell}U_{\phi_\ell}(x)
$$

이 방식은 작은 큐비트 수로도 더 복잡한 decision boundary를 만들 수 있습니다. 대신 depth가 늘고, 데이터 스케일링에 민감해집니다.

주의할 점

  • QML은 자동으로 고전 ML보다 빠르거나 좋은 것이 아닙니다.
  • 데이터 로딩 비용을 무시하면 장점이 과장됩니다.
  • 작은 toy dataset에서 보인 성능이 실제 데이터로 이어지지 않을 수 있습니다.
  • 비교 기준은 반드시 classical baseline과 같은 train/test split으로 둡니다.
  • shots noise, optimizer seed, 회로 초기값을 기록해야 재현성이 생깁니다.

평가 기준

QML 실험은 accuracy만 적으면 부족합니다. 최소한 아래를 함께 봅니다.

  • 동일 데이터 split에서 classical baseline과 비교했는가?
  • 파라미터 수와 학습 시간은 비슷한가?
  • shots 수를 늘리면 성능이 안정되는가?
  • noise-free simulator와 noisy simulator 차이가 얼마나 나는가?
  • feature map을 고전적으로 계산한 kernel과 비교했는가?

이 기준을 통과해야 “양자회로를 썼다”가 아니라 “양자회로가 의미 있는 역할을 했다”에 가까워집니다.

PennyLane 최소 예시

import pennylane as qml
from pennylane import numpy as np

dev = qml.device("default.qubit", wires=2)

@qml.qnode(dev)
def model(x, theta):
    qml.RY(x[0], wires=0)
    qml.RY(x[1], wires=1)
    qml.CNOT(wires=[0, 1])
    qml.RY(theta[0], wires=0)
    qml.RY(theta[1], wires=1)
    return qml.expval(qml.PauliZ(0))

theta = np.array([0.1, -0.2], requires_grad=True)
print(model(np.array([0.3, 0.7]), theta))