양자 커널과 Qiskit으로 구성하는 SVM 분류 파이프라인
Quantum Machine Learning의 양자 커널 방법을 중심으로 특징사상, fidelity 기반 커널 행렬, Qiskit과 SVM 연동, 노이즈·샷 관리 방법을 정리한다.
2026-08-14 · 최초 발행 2025-10-14
양자 커널 방법은 양자 회로가 만든 특징 공간에서 입력 간 유사도를 계산하고, 그 결과를 고전 분류기에 넘긴다. NISQ 환경에서 양자 머신러닝을 다룰 때는 회로 자체보다도 특징사상, 샷 기반 추정의 변동성, 커널 행렬의 안정성을 함께 설계해야 한다.
QML(Quantum Machine Learning)은 양자 상태를 이용해 데이터 표현력과 계산 효율의 잠재적 향상을 탐색하는 머신러닝 분야다. 회로 기반 변분 모델과 커널 기반 모델이 대표적인 갈래다.
양자 커널은 고전 커널 (k(x, z)) 대신 양자 회로로 (kQ(x, z)=|\langle ϕ(x)|ϕ(z)\rangle|^2), 즉 상태 유사도(fidelity)를 추정한다. 특징사상 (U_ϕ(x))는 입력 데이터를 고차원 힐베르트 공간으로 임베딩하는 역할을 맡는다.
Qiskit은 회로 설계, 트랜스파일, 시뮬레이션(Aer), 머신러닝용 qiskit-machine-learning 컴포넌트를 제공하는 오픈소스 양자 개발 프레임워크다. Sampler와 Estimator 같은 프리미티브 기반 실행 모델도 포함한다.
특징사상 설계가 커널의 성질을 바꾼다
데이터를 양자 회로에 넣는 방식에는 앵귤러 인코딩과 아날로그·진폭 인코딩 등이 있다. 실무에서는 회로 심도와 노이즈를 감안해 앵귤러 인코딩을 선호하는 경향이 있다.
ZZFeatureMap, PauliFeatureMap처럼 상호작용 항(ZZ)을 포함하는 회로는 비선형 표현력을 확보하는 데 사용된다. reps, entanglement 패턴, 파라미터 스케일링은 편향·분산 트레이드오프에 영향을 준다.
두 입력을 같은 회로로 변환한 뒤 상태 유사도를 측정하면 커널 값을 구성할 수 있다. 샷 기반 빈도 추정에는 확률적 변동이 따른다. SWAP 테스트, 두 입력을 결합한 중첩 회로, 샘플러 기반 추정이 구현 선택지이며, enforce_psd 옵션으로 반정정부호(PSD) 보정을 적용할 수 있다.
양자 실행과 고전 학습을 잇는 흐름
입력은 정규화한 뒤 양자 커널 행렬을 사전 계산하고, 결과 행렬은 precomputed 커널을 사용하는 고전 SVM(SVC)에 전달한다. 모델 선택에서는 C, reps, entanglement, shots를 그리드 또는 베이지안 탐색으로 함께 조정할 수 있다.
NISQ 환경에서는 디포레이션과 게이트 오류가 결과 변동성을 만든다. 샷 수를 늘리면 분산은 줄어들지만 시간 비용은 커진다. 트랜스파일 레벨, 레이아웃 선택, 펄스 최적화, 오류 완화(미티게이션)는 안정성을 높이는 데 기여한다.
Qiskit에서는 다음 구성 요소를 조합할 수 있다.
qiskit.circuit.library: 특징사상 회로 템플릿qiskit_aer.primitives.AerSampler: 시뮬레이션 기반 샘플링 실행qiskit_machine_learning.kernels.FidelityQuantumKernel: 커널 행렬 계산
커널 행렬에서 예측까지
소규모 구조적 데이터의 비선형 이진 분류에서는 XOR, 동심원 같은 토이 데이터셋이나 저차원 도메인 특화 피처로 표현력을 검증할 수 있다. 특성 엔지니어링, 특징사상 선택, 커널 사전계산, SVM 학습, AUC·ROC 평가 순으로 진행하며, 고전 RBF와 비교해 유사하거나 일부 우위 사례가 관측될 수 있다.
재료·화학 특성 예측에서는 화학 지표나 양자화학 계산에서 나온 저차원 기술자 피처 사이의 비선형 상호작용을 다룰 수 있다. 회로 심도를 제한한 저비용 커널은 실험 주도 의사결정을 지원한다.
이상 탐지와 리스크 스코어링에서는 커널 모델의 듀얼 형태를 통해 서포트 벡터를 중심으로 결정경계를 설명할 수 있다. 규제 환경에서는 단순하고 안정적인 커널 파이프라인이 선호된다.
고전 커널과 양자 커널의 운영상 차이
| 항목 | 성능 | 확장성 | 일관성 | 안정성 | 운영 편의 |
|---|---|---|---|---|---|
| 고전 RBF 커널 | 중~고, 데이터 의존 | 매우 높음 | 높음 | 매우 높음 | 매우 높음 |
| 양자 커널(NISQ) | 데이터/회로 의존, 경우에 따라 우위 | 중, 샷·회로심도 제약 | 중, 분산 존재 | 중, 노이즈 민감 | 중, 인프라 필요 |
| 양자 커널(오류보정 가정) | 잠재적 고성능 | 높음(가정) | 높음 | 높음 | 중, HW 비용 큼 |
주: 최신 하드웨어 성능 및 오류보정 수준은 최신 정보 확인 필요.
설계와 운영에서 확인할 지점
문제 정의와 데이터 전처리 방식을 먼저 정한 뒤, reps, entanglement, feature scaling을 포함한 특징사상 후보를 설계한다. 다음으로 AerSampler, shots, seed 같은 시뮬레이터 옵션을 정하고 커널 행렬을 계산한다. PSD 보정 필요 여부를 검증한 뒤 SVM 학습과 교차검증, 하이퍼파라미터 탐색으로 이어간다.
노이즈 민감도 분석에서는 seed 고정과 버전 핀으로 재현성을 확보한다. 마지막으로 성능과 비용의 트레이드오프를 평가해 운영 이행 여부를 결정한다.
회로 심도를 높이면 표현력은 커질 수 있지만 노이즈와 시간 비용도 늘어난다. 샷 수를 늘리면 분산은 줄어드는 반면 계산시간은 선형으로 증가한다. PSD 보정은 수치 안정성을 높일 수 있으나 커널 정보가 일부 손실될 가능성이 있다.
Qiskit Fidelity Quantum Kernel과 SVM 구현
전제조건은 Python 3.9~3.11 권장과 로컬 시뮬레이터 사용이다. 패키지 버전은 환경에 따라 상이하므로 최신 정보 확인이 필요하다.
설치:
pip install "qiskit>=1.0" "qiskit-aer>=0.13" "qiskit-machine-learning>=0.7" scikit-learn
실행 코드:
# 환경: Python 3.10+, qiskit>=1.0, qiskit-aer>=0.13, qiskit-machine-learning>=0.7
import numpy as np
from sklearn.datasets import make_circles
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, roc_auc_score
from qiskit.circuit.library import ZZFeatureMap
from qiskit_aer.primitives import Sampler as AerSampler
from qiskit_machine_learning.kernels import FidelityQuantumKernel
# 1) 데이터 준비
X, y = make_circles(n_samples=400, noise=0.1, factor=0.4, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=7, stratify=y)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 2) 특징사상 및 샘플러 설정
num_features = X_train.shape[1]
feature_map = ZZFeatureMap(feature_dimension=num_features, reps=2, entanglement='full')
sampler = AerSampler(options={"shots": 2048, "seed": 123})
# 3) 양자 커널 구성
qkernel = FidelityQuantumKernel(feature_map=feature_map, sampler=sampler, enforce_psd=True)
# 4) 커널 행렬 계산
K_train = qkernel.evaluate(x_vec=X_train)
K_test = qkernel.evaluate(x_vec=X_test, y_vec=X_train)
# 5) SVM 학습 (precomputed 커널)
svc = SVC(kernel='precomputed', C=1.0, probability=False, random_state=7)
svc.fit(K_train, y_train)
# 6) 평가
y_pred = svc.predict(K_test)
acc = accuracy_score(y_test, y_pred)
# AUC 계산을 위해 결정함수 사용
y_score = svc.decision_function(K_test)
auc = roc_auc_score(y_test, y_score)
print(f"Accuracy: {acc:.3f}")
print(f"AUC: {auc:.3f}")
C, reps, entanglement, shots는 GridSearchCV로 함께 탐색할 수 있다. enforce_psd=True를 적용하고, 필요하면 eigenvalue clipping 또는 diagonal shift 전략을 추가할 수 있다. random_state와 seed, 패키지 버전, Sampler 옵션도 고정한다.
샷 수 증가에 따른 추정 분산은 분산 ~ O(1/shots)로 근사할 수 있다. 커널 계산 비용은 O(n^2 · cost(Uϕ))로 스케일하므로 소규모 데이터셋에서 실용적 이점을 확보할 수 있다. 특정 구조적 데이터에서 AUC·ACC 개선 사례가 존재하지만, 결과는 데이터와 회로에 크게 의존한다.
고전 커널로 포착하기 어려운 상호작용을 표현할 여지가 있으며, SVM의 단순성과 결합해 운영 용이성과 규제 친화적인 의사결정 근거를 확보할 수 있다. 다만 NISQ 환경의 노이즈 영향은 계속 존재한다. 실기기에서는 오류 완화와 리셋 기법이 필요하며, 최신 Qiskit API와 백엔드 사양 변동 가능성도 확인해야 한다.