대표 형태
| 형태 | 설명 |
|---|---|
| quantum kernel | 양자 feature map으로 kernel matrix를 계산 |
| variational classifier | pQC 출력 기대값을 분류 점수로 사용 |
| 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 encoding | x\mapsto |x\rangle | 이산 bitstring 데이터에 직관적 |
| angle encoding | x_j\mapsto R_y(x_j) | 구현이 쉽고 NISQ에 적합 |
| amplitude encoding | x\mapsto \sum_j x_j|j\rangle | 표현은 압축적이지만 상태 준비가 비쌀 수 있음 |
| Hamiltonian encoding | e^{-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))