Qiskit으로 구현하는 QSVM과 변분 양자 회로

Quantum SVM과 VQC의 구조, 양자 피처 맵·QNN 설계, Qiskit 기반 분류 구현과 운영상 절충점을 다룬다.

2026-08-14 · 최초 발행 2024-04-29

양자 회로를 분류 모델에 연결하는 방식

퀀텀 머신러닝(Quantum Machine Learning, QML)은 클래식 머신러닝의 학습 과정에 양자 컴퓨팅을 결합하는 접근이다. 여기서는 양자 커널을 이용하는 Quantum SVM(QSVM)과 파라미터화 회로를 학습하는 Variational Quantum Circuits(VQC)를 중심으로 본다.

QSVM은 양자 커널로 고차원 힐베르트 공간의 내적, 즉 유사도를 계산한다. 이렇게 얻은 커널 행렬은 클래식 SVM에 전달되고, SVM은 이를 바탕으로 초평면을 찾는다.

VQC는 Ansatz라 부르는 파라미터화 양자 회로와 고전 최적화를 결합한다. 손실 함수를 최소화하도록 회로 파라미터를 갱신하는 방식이다.

Qiskit에서는 Primitives의 Sampler와 Estimator로 확률 또는 관측치의 기댓값을 평가할 수 있다. qiskit-machine-learningSamplerQNN, EstimatorQNN, 커널 API도 이 구현에 사용된다.

피처 맵과 Ansatz가 결정하는 표현 범위

데이터를 회로에 넣는 Feature Map은 모델의 출발점이다. ZZFeatureMap처럼 상호작용 항을 포함한 인코딩은 비선형 매핑을 제공한다. 이때 스케일링 범위와 데이터 차원을 회로에 맞춰야 하며, 레이어를 과도하게 늘리면 바론 플래토(barren plateau) 위험이 생긴다.

Ansatz는 TwoLocal, EfficientSU2처럼 얕으면서도 표현력을 확보할 수 있는 회로를 선택할 수 있다. 회로 깊이와 얽힘 패턴(Linear/Ring/Full), 게이트 세트가 하드웨어와 맞는지 함께 검토한다.

Sampler는 확률을, Estimator는 관측치 기댓값을 평가한다. 최적화기는 SPSA, COBYLA, Nelder-Mead 등을 노이즈 견고성 관점에서 선택한다.

QSVM은 데이터 효율과 학습 안정성에서 장점이 있지만 커널 계산 비용이 커질 수 있다. VQC는 표현력과 엔드투엔드 학습이 가능하지만 초기화에 민감하고 최적화가 어려울 수 있다.

데이터 입력부터 평가까지의 경로

입력 단계에서는 데이터셋을 준비하고 스케일링하며, 필요하면 차원 축소를 적용한다. 처리 단계에서는 Feature Map 인코딩, Sampler 또는 Estimator 실행, 손실 계산, Optimizer 갱신이 이어진다. 결과물은 학습된 파라미터 또는 커널 행렬이며, 이를 예측과 평가 지표 산출에 사용한다.

데이터 차원과 큐빗 수가 맞지 않으면 PCA로 차원을 줄이거나 Feature Map을 바꾼다. 트랜스파일이 실패하거나 백엔드 제약이 있으면 게이트셋과 회로 깊이를 줄이고 seed_transpiler 설정을 검토한다. 샷 노이즈가 지나치면 shots를 늘리고 readout mitigation을 적용하며 에러 모델을 확인한다.

QSVMVQC데이터 로드/정규화방식 선택Feature Map로 양자 커널계산Feature Map + Ansatz 합성커널 행렬(K_train, K_test)Sampler/Estimator 실행손실 계산/최적화SVM 학습/예측학습된 파라미터성능 평가

QSVM과 VQC를 고를 때 보는 차이

기준 Quantum SVM VQC
성능(샷 비용) 커널 행렬 계산에 샷 비용 큼, 예측은 가벼움 에포크×샷 비용 누적, 회로/옵티마에 따라 변동
확장성(특징 수) O(n^2) 커널 계산·메모리 부담, 미니배치 커널 필요 파라미터 수·깊이에 의존, 얕은 회로로 확장성 확보 가능
일관성(재현성) 비교적 안정적, seed 고정으로 일관성 확보 용이 초기화·랜덤성 민감, 로스 지형 평탄화 이슈
안정성(노이즈) 노이즈에 민감, 미티게이션 중요 SPSA·노이즈 적응 최적화로 완화 가능
운영 편의 SVC와 동일 워크플로, 하이퍼파라미터 단순 옵티마/러닝 레이트/회로 설계 등 조정 항목 다수

Qiskit에서 양자 커널을 SVM으로 연결하기

전제조건은 Python 3.10+, Qiskit 1.x, qiskit-machine-learning 0.6+다. 최신 API가 바뀔 수 있으므로 최신 정보 확인이 필요하다. 설치에는 다음 구성을 사용한다.

pip install "qiskit>=1.0" "qiskit-machine-learning>=0.6" scikit-learn

데이터셋은 2차원 이진 분류 make_moons를 사용하고, MinMax [0, 2π] 스케일링을 권장한다. Fidelity 기반 양자 커널을 계산한 다음 scikit-learn SVC에 사전 계산 커널을 전달한다. Sampler shots와 Feature Map 깊이 reps는 바이어스-분산 균형에 영향을 준다.

# 환경: Python 3.10+, qiskit>=1.0, qiskit-machine-learning>=0.6
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import accuracy_score
from sklearn.svm import SVC
import numpy as np

from qiskit.circuit.library import ZZFeatureMap
from qiskit.primitives import Sampler
from qiskit_machine_learning.kernels import FidelityQuantumKernel

# 1) 데이터 준비
X, y = make_moons(n_samples=400, noise=0.25, random_state=42)
X = MinMaxScaler(feature_range=(0, 2*np.pi)).fit_transform(X)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, random_state=42, stratify=y)

# 2) 양자 커널 정의
feature_map = ZZFeatureMap(feature_dimension=2, reps=2)  # reps↑ = 표현력↑, 노이즈·비용↑
sampler = Sampler(options={"shots": 2048, "seed": 1234})
qkernel = FidelityQuantumKernel(feature_map=feature_map, sampler=sampler)

# 3) 커널 행렬 계산
K_tr = qkernel.evaluate(X_tr)
K_te = qkernel.evaluate(X_te, X_tr)

# 4) SVM 학습(커널 사전계산)
svc = SVC(kernel="precomputed", C=1.0, random_state=42)
svc.fit(K_tr, y_tr)
pred = svc.predict(K_te)

print("QSVM Accuracy:", accuracy_score(y_te, pred))

커널 행렬은 미니배치로 계산해 메모리 부담을 줄일 수 있다. reps=1~2, shots=1k~4k에서 시작하고, 노이즈 환경에서는 readout mitigation을 고려한다.

변분 회로와 QNN 분류기 구성

VQC에서는 SamplerQNN의 확률 출력을 NeuralNetworkClassifier에 연결해 교차엔트로피 학습을 수행한다. Feature Map과 TwoLocal Ansatz를 합성해 표현력을 확보한다.

# 환경: Python 3.10+, qiskit>=1.0, qiskit-machine-learning>=0.6
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import accuracy_score
import numpy as np

from qiskit.circuit import QuantumCircuit
from qiskit.circuit.library import ZZFeatureMap, TwoLocal
from qiskit.primitives import Sampler
from qiskit_machine_learning.neural_networks import SamplerQNN
from qiskit_machine_learning.algorithms.classifiers import NeuralNetworkClassifier
from qiskit_algorithms.optimizers import COBYLA  # qiskit-algorithms가 설치되어 있어야 함

# 1) 데이터 준비
X, y = make_moons(n_samples=400, noise=0.25, random_state=42)
X = MinMaxScaler(feature_range=(0, 2*np.pi)).fit_transform(X)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, random_state=42, stratify=y)

# 2) 회로 구성(Feature Map + Ansatz)
num_qubits = 2
feature_map = ZZFeatureMap(feature_dimension=num_qubits, reps=1)
ansatz = TwoLocal(num_qubits=num_qubits, rotation_blocks="ry", entanglement_blocks="cz",
                  entanglement="linear", reps=2)
circuit = QuantumCircuit(num_qubits)
circuit = circuit.compose(feature_map).compose(ansatz)

# 3) QNN 정의(Sampler 기반, 이진 분류)
sampler = Sampler(options={"shots": 2048, "seed": 1234})
# 측정 비트열의 패리티를 클래스로 해석(0/1)
interpret = lambda bitstr: bitstr % 2
qnn = SamplerQNN(
    circuit=circuit,
    input_params=feature_map.parameters,   # 데이터 파라미터
    weight_params=ansatz.parameters,       # 학습 파라미터
    interpret=interpret,
    output_shape=2,
    sampler=sampler,
)

# 4) 분류기 학습
optimizer = COBYLA(maxiter=150, rhobeg=0.5)
clf = NeuralNetworkClassifier(
    neural_network=qnn,
    optimizer=optimizer,
    loss="cross_entropy",     # 확률 출력에 적합
    one_hot=True,             # 다중 클래스 원-핫 라벨 기대
)

clf.fit(X_tr, y_tr)
pred = clf.predict(X_te)
print("VQC Accuracy:", accuracy_score(y_te, pred))

초기 파라미터 seed를 고정하면 재현성을 확보할 수 있다. 노이즈 환경에서는 SPSA를, 시뮬레이터에서는 L-BFGS-B 또는 COBYLA를 시작점으로 사용할 수 있다. 회로 깊이와 얽힘 패턴은 소폭 변경하면서 과적합과 플래토를 관찰한다.

Qiskit 1.x에서는 일부 알고리즘 클래스가 축소·변경되었으므로 primitives와 QNN 중심 사용을 권장하며, 최신 정보 확인이 필요하다.

적용 맥락과 기대할 수 있는 변화

금융 리스크 분류에서는 이상치나 경계 데이터에서 커널 트릭을 강화해 구분 능력을 높이고, QSVM으로 규제 친화적인 설명 가능 결정경계를 확보할 수 있다.

재료 탐색과 화학 영역에서는 양자 상태 특성의 효율적 내적 계산을 바탕으로 특성 유사도 기반 분류·회귀를 수행할 수 있다. VQC는 실험 데이터 적합과 하이브리드 파라미터 최적화에 활용된다.

제조 이상 감지에서는 저용량·고잡음 센서 데이터를 얕은 회로 기반 분류기로 경량 배치하고, 미니배치 커널 계산으로 스트리밍 환경에 대응할 수 있다.

데이터 수와 특징 수에 맞춰 학습 샷 비용을 최적화하면 소형 데이터셋에서 베이스라인 대비 210%p 정확도 개선이 가능하다(문제 의존). 커널을 사전 계산하고 캐싱하면 예측 지연을 밀리초수십 밀리초 수준으로 최소화할 수 있다. 고차원 유사도 공간의 표현력은 커지고, 하드웨어가 진화할 때 성능을 높일 여지도 남는다.

회로 깊이와 노이즈를 운영 변수로 다루기

회로는 얕게 시작하고 reps 1~2에서 필요에 따라 점진적으로 늘린다. 하드웨어 네이티브 게이트셋을 기준으로 트랜스파일 목표 레벨을 설정한다.

전처리에서는 스케일링 범위와 Feature Map 도메인을 맞춘다. PCA 또는 UMAP로 차원을 정합한 후 인코딩할 수 있다.

노이즈 환경에서는 SPSA 또는 COBYLA와 샷 스케줄링(초기 저샷→후반 고샷)을 적용한다. seed_transpiler, seed_simulator, Optimizer 초기값을 고정하면 재현성 관리에 도움이 된다.

커널 히트맵은 데이터 분리 가능성을 미리 점검하는 데 쓸 수 있다. 로스 곡선과 그라디언트 노름을 관찰하면 플래토와 발산을 탐지할 수 있다.

QSVM은 소형 데이터와 명확한 결정경계에서 안정성과 단순성이 강점이다. 표현력과 엔드투엔드 학습이 필요한 경우에는 VQC의 유연성이 맞을 수 있다. Qiskit 1.x에서는 primitives와 QNN 중심으로 구현을 표준화하고, 얕은 회로·일관된 전처리·노이즈 대응 최적화를 기본 원칙으로 둔다.

퀀텀 머신러닝Qiskit양자 SVM변분 양자 회로QNN