⚛️ QUANTUM MACHINE LEARNING — Ketika Komputasi Kuantum Bertemu ML

VQE · Quantum Neural Networks · Quantum Kernel Methods · Hybrid Classical-Quantum · NISQ Era

Filosofi Fundamental

Quantum Machine Learning bukanlah “ML yang jalan di komputer kuantum.” QML adalah persimpangan antara dua paradigma: representasi data dalam ruang Hilbert berdimensi eksponensial dan optimasi gradient-based. Dokumen ini membedah dari first principles: mengapa quantum bisa memberikan advantage untuk ML, bagaimana VQE menjadi backbone algoritma NISQ, arsitektur QNN, keterbatasan barren plateau, dan peta jalan menuju quantum advantage yang terbukti. Bukan hype — ini matematika, fisika, dan kode.


Daftar Isi


First Principles — Mengapa Quantum untuk ML?

Sumber Quantum Advantage

AreaClassical ComplexityQuantum SpeedupKenapa?
Linear Algebra (matrix inversion)*HHL algorithm — quantum superposition untuk solve linear system
Inner Product (kernel)*Quantum feature map → dot product dalam ruang Hilbert besar
Optimization (combinatorial)ExponentialPolynomial*QAOA, VQE — parallel exploration of solution space
Sampling (distribution)IntractableEfficient*Quantum circuits bisa sample dari distribusi yang classical sulit
Gradient Estimation*Parameter shift rule — bisa parallelize gradient per parameter

* Teoritis — tergantung problem dan implementasi. Di NISQ era, belum terbukti unconditional advantage.

Kapan QML Berpotensi Unggul?

Apakah problem punya struktur yang bisa dieksploitasi secara quantum?
├── Ya → Apakah classical ML bisa solve dengan akurat?
│   ├── Ya → Classical wins (lebih murah, stabil, proven)
│   └── Tidak → QML worth exploring
│       ├── Data punya inherent quantum structure?
│       │   ├── Ya → Quantum data (chemistry, physics) → QML kemungkinan besar unggul
│       │   └── Tidak → Feature map harus dipilih hati-hati
│       └── Problem size besar? → Quantum advantage lebih terlihat di skala besar
└── Tidak → Classical ML

Matematika Dasar — Qubit, Gerbang, Sirkuit

Qubit vs Bit

Satu qubit bisa representasi superposisi dua state. qubit = superposisi state.

Gerbang Quantum Penting

GerbangMatriksEfek
Hadamard (H)Buat superposisi: $
Pauli-X (NOT)Flip: $
Pauli-YRotasi sumbu Y
Pauli-ZPhase flip: $
CNOT (CX)Entanglement: control-target XOR
Rotasi (RX, RY, RZ)Rotasi kontinu — parameterizable

Parameterized Quantum Circuit (PQC)

Jantung QML: sirkuit dengan parameter yang bisa di-optimasi.

|0⟩ ── H ── RY(θ₁) ──●─────────────────── RX(θ₄) ──⟩
                      │
|0⟩ ── H ── RY(θ₂) ──⊕── RY(θ₃) ─────────●───────⟩
                                          │
                                          └── RX(θ₅) ──⟩

3 qubit, 5 parameter. Vektor parameter .


VQE — Variational Quantum Eigensolver

Paradigma VQE

VQE adalah algoritma hybrid klasikal-kuantum untuk mencari eigenvalue minimum dari Hamiltonian .

┌─────────────────────────┐        ┌─────────────────────────┐
│   QUANTUM PROCESSOR     │        │   CLASSICAL OPTIMIZER   │
│                         │        │                         │
│  ┌───────────────────┐  │  ⟨H⟩   │  ┌───────────────────┐  │
│  │ Parameterized        │──┼─────┼──► Cari θ baru       │  │
│  │ Circuit U(θ)         │  │     │  │  yang minimalkan  │  │
│  │                      │  │     │  │  expectation value│  │
│  │ Siapkan state trial  │  │     │  │                   │  │
│  │ |ψ(θ)⟩ = U(θ)|0⟩     │  │     │  │ θ ← argmin ⟨H⟩    │  │
│  │                      │◄─┼─────┼──┤                   │  │
│  └───────────────────┘  │  θ_baru│  └───────────────────┘  │
└─────────────────────────┘        └─────────────────────────┘

Langkah:

  1. Siapkan ansatz state
  2. Ukur expectation value
  3. Classical optimizer update untuk minimalkan
  4. Iterasi hingga konvergen

Ansatz — Template Sirkuit VQE

Ansatz adalah “tebakan” struktur sirkuit. Pilihan ansatz sangat mempengaruhi konvergensi.

AnsatzQubitGerbangDepthKapan
Hardware-EfficientBebasRX, RY, RZ, CNOT (nearest-neighbor)RendahDefault — cocok untuk hardware noise
UCCSD (chemistry)2 × orbitalFermionic excitationTinggiQuantum chemistry — physical accuracy
QAOAProblem-dependentPhase + MixerBervariasiCombinatorial optimization
HEA (Alternating)BebasLayer RX+CNOT+RY+CNOTSedangGeneral purpose QML

Contoh — VQE untuk H₂ Molecule

import pennylane as qml
from pennylane import numpy as np
 
# Define molecule
H, qubits = qml.qchem.molecular_hamiltonian(
    ["H", "H"],
    coordinates=np.array([0.0, 0.0, -0.6614, 0.0, 0.0, 0.6614]),
    charge=0,
)
 
# Device
dev = qml.device("default.qubit", wires=qubits)
 
# Ansatz
def ansatz(params, wires):
    qml.BasisState(np.array([1, 1, 0, 0]), wires=wires)
    for i in range(2):
        qml.DoubleExcitation(params[i], wires=[0, 1, 2, 3])
        qml.SingleExcitation(params[i + 2], wires=[0, 2])
        qml.SingleExcitation(params[i + 4], wires=[1, 3])
 
# Cost function
@qml.qnode(dev)
def cost_fn(params):
    ansatz(params, wires=range(qubits))
    return qml.expval(H)
 
# Optimize
opt = qml.AdamOptimizer(stepsize=0.4)
params = np.random.normal(0, np.pi, 6)
for step in range(100):
    params, energy = opt.step_and_cost(cost_fn, params)
    if step % 10 == 0:
        print(f"Step {step}: Energy = {energy:.6f} Ha")

Quantum Neural Networks — Arsitektur

Struktur QNN

DATA ENCODING        VARIATIONAL LAYERS       MEASUREMENT
┌────────────┐     ┌──────────────────┐     ┌────────────┐
│ x₁ ── RY  │     │ ┌──┐ ┌──┐ ┌──┐   │     │ ⟨Z₀⟩ = y₁  │
│ x₂ ── RY  │     │ │RY│ │RY│ │RY│   │     │ ⟨Z₁⟩ = y₂  │
│ x₃ ── RY  │────►│ │CN│ │CN│ │CN│   │────►│ ⟨Z₂⟩ = y₃  │
│ ...       │     │ │RY│ │RY│ │RY│   │     │            │
│ x_n ── RY │     │ └──┘ └──┘ └──┘   │     │            │
└────────────┘     └──────────────────┘     └────────────┘

1. Data Encoding

Cara memasukkan data classical ke quantum state — sangat mempengaruhi performa.

MethodDeskripsiQubit per FeatureComplexity
Angle Encoding1
Amplitude Encoding$x \to \sum x_ii\rangle$
IQP Encoding1
Hamiltonian Encoding1-Problem-dependent

Angle Encoding — Paling Sederhana:

def angle_encoding(x, wires):
    """Encode classical vector x ke rotation angles"""
    for i, val in enumerate(x):
        qml.RX(val, wires=i)    # atau RY, RZ

Amplitude Encoding — Paling Efisien:

def amplitude_encoding(x, wires):
    """Encode normalized vector ke amplitude quantum state"""
    qml.AmplitudeEmbedding(features=x, wires=wires, normalize=True)

2. Variational Layers (Ansatz)

Lapisan yang berisi parameter yang di-training. Struktur umum tiap layer:

Layer l:
  1. Single-qubit rotations: RY(θ_{l,1}), RY(θ_{l,2}), ..., RY(θ_{l,n})
  2. Entangling gates: CNOT(0,1), CNOT(1,2), ..., CNOT(n-1, n)
  3. Optional: Second rotation layer — RZ(θ'_{l,i})

StronglyEntanglingLayers (PennyLane):

@qml.template
def variational_block(params, wires):
    """params shape = (n_layers, n_qubits, 3) — 3 rotation per qubit per layer"""
    for layer in range(params.shape[0]):
        # Rotasi
        for qubit in range(params.shape[1]):
            qml.Rot(*params[layer, qubit], wires=qubit)
        # Entanglement — circulant
        for qubit in range(params.shape[1] - 1):
            qml.CNOT(wires=[qubit, qubit + 1])
        qml.CNOT(wires=[params.shape[1] - 1, 0])

3. Measurement

Pengukuran menghancurkan quantum state. Output adalah expectation value operator :

Biasanya (Pauli-Z) — output di [-1, 1], bisa di-rescale ke range target.

@qml.qnode(dev)
def qnn(x, params):
    angle_encoding(x, wires)
    variational_block(params, wires)
    return [qml.expval(qml.PauliZ(i)) for i in range(n_qubits)]

Quantum GAN (QGAN)

Generator (Quantum)              Discriminator (Classical)
┌─────────────────────┐         ┌────────────────────────┐
│                     │  fake    │                        │
│ Noise → PQC → State │──data──►│ Classical Neural Net   │
│        |ψ⟩          │         │ → real/fake            │
└──────┬──────────────┘         └────────────────────────┘
       │ real data (classical)
       ▼
┌──────────────────────────────────────────────────────────┐
│ Loss Functions                                            │
│ Generator: maximize D(G(z))  — quantum parameters         │
│ Discriminator: maximize log(D(x)) + log(1 - D(G(z)))     │
└──────────────────────────────────────────────────────────┘

Quantum Kernel Methods — QSVM

Intuisi

Quantum Kernel Methods menggunakan quantum feature map untuk memproyeksikan data ke ruang Hilbert berdimensi sangat tinggi, lalu menghitung kernel (inner product) di ruang itu.

Di mana — state setelah encoding circuit.

QSVM Pipeline

# 1. Definisikan quantum feature map
def feature_map(x, wires):
    """IQP-style feature map"""
    for i in range(len(x)):
        qml.Hadamard(wires=i)
        qml.RZ(x[i], wires=i)
    for i in range(len(x) - 1):
        qml.CNOT(wires=[i, i + 1])
        qml.RZ(x[i] * x[i + 1], wires=i + 1)
        qml.CNOT(wires=[i, i + 1])
 
@qml.qnode(dev)
def kernel(x1, x2):
    """Quantum kernel k(x1, x2) = |⟨φ(x1)|φ(x2)⟩|²"""
    feature_map(x1, wires)
    qml.adjoint(feature_map)(x2, wires)  # Inverse
    return qml.probs(wires=[0])
 
# 2. Hitung kernel matrix
K = np.zeros((len(X_train), len(X_train)))
for i in range(len(X_train)):
    for j in range(i, len(X_train)):
        K[i][j] = K[j][i] = kernel(X_train[i], X_train[j])
 
# 3. Train SVM dengan kernel matrix
from sklearn.svm import SVC
svm = SVC(kernel="precomputed")
svm.fit(K, y_train)

Kelebihan Quantum Kernel

  • No variational parameters — langsung compute kernel, hindari barren plateau
  • Proven advantage — untuk certain data distributions, quantum kernel bisa classical-intractable
  • Integrasi mudah — drop-in replacement untuk classical kernel di SVM

Kelemahan

  • Kernel estimation noise — quantum measurement inherent stochastic
  • Scaling — kernel matrix quantum circuit executions — mahal
  • Feature map design — masih trial-and-error, belum ada teori panduan

Barren Plateau — Musuh Utama QML

Fenomena

Semakin banyak qubit, semakin gradient cost function mendekati nol secara eksponensial. Training menjadi mustahil — seperti mencari jarum di ruang berdimensi eksponensial.

= jumlah qubit. Untuk 20 qubit, gradient variance sudah mencapai floating-point underflow.

Penyebab

  1. Expressivity terlalu tinggi: Sirkuit terlalu “acak” — parameter space terlalu besar
  2. Entanglement terlalu banyak: Setiap gerbang CNOT meningkatkan entanglement → randomness
  3. Measurement locality: Local operator tidak overlap dengan global effect

Solusi

ApproachCara KerjaEfektivitas
PretrainingLatih layer-by-layerMedium — problem-dependent
Circuit shapingBatasi expressivity, kurangi entanglementHigh — terbukti efektif
Gradient-free optimizersCOBYLA, Nelder-MeadMedium — skalabilitas terbatas
Layer-wise trainingTambah 1 layer, train, freeze, repeatMedium
Adaptive ansatzGrow circuit secara adaptifHigh — ADAPT-VQE, butuh overhead
Correlated parametersKelompokkan parameter yang berkorelasiEarly research
Classical pre-solveGunakan classical approximation sebagai initial pointPraktis

Circuit shaping — aturan praktis:

❌ Terlalu expressif:
   Layer: RY ── CNOT ── RY ── CNOT ── RY ── ... (banyak layer)

✅ Cukup expressif untuk task:
   Layer: RY ── CNOT ── RZ ── CNOT ── RY    (depth optimal)
   Hanya 2-3 layer untuk classification sederhana

Framework & Tools

FrameworkBackendQML FeaturesBahasaProduksi?
PennyLaneSimulator + hardwareFull QML (QNN, kernel, VQE, QGAN)Python
Qiskit (IBM)IBM Quantum + simulatorQiskit ML (QSVM, QGAN)Python
TensorFlow QuantumCirq backendIntegrasi TF/KerasPython⚠️
Braket (AWS)Simulator + IonQ/RigettiHybrid jobsPython
CirqGoogle simulatorLow-level, TFQ integrationPython⚠️
PennyLane-LightningGPU simulatorHigh-performance, multi-GPUC++/Python
Strawberry FieldsPhotonic quantumContinuous-variable QMLPython⚠️

Step-by-Step Implementasi

Binary Classification dengan QNN

import pennylane as qml
from pennylane import numpy as np
from sklearn.datasets import make_moons
 
# 1. Data
X, y = make_moons(n_samples=200, noise=0.1)
X = (X - X.mean(0)) / X.std(0)  # Normalisasi
 
# 2. Device
n_qubits = 4
dev = qml.device("default.qubit", wires=n_qubits)
 
# 3. Circuit
@qml.qnode(dev)
def circuit(x, params):
    # Encoding
    for i in range(min(len(x), n_qubits)):
        qml.RX(x[i], wires=i)
 
    # Variational layers
    qml.BasicEntanglerLayers(params, wires=range(n_qubits))
 
    # Measurement
    return qml.expval(qml.PauliZ(0))
 
# 4. Cost
def cost(params, X, y):
    predictions = np.array([circuit(x, params) for x in X])
    return np.mean((predictions - y) ** 2)
 
# 5. Training
np.random.seed(42)
params = np.random.uniform(0, 2*np.pi, (3, n_qubits, 2))
opt = qml.AdamOptimizer(stepsize=0.1)
 
for step in range(200):
    params, loss = opt.step_and_cost(cost, params, X, y)
    if step % 20 == 0:
        acc = np.mean((np.array([circuit(x, params) for x in X]) > 0) == y)
        print(f"Step {step}: loss={loss:.4f}, acc={acc:.3f}")

VQE untuk Optimization Problem

# QAOA-style VQE untuk Max-Cut
def maxcut_hamiltonian(graph):
    """Convert Max-Cut problem ke Ising Hamiltonian"""
    H = qml.Hamiltonian([], [])
    for (i, j) in graph.edges:
        H += 0.5 * qml.PauliZ(i) @ qml.PauliZ(j)
    return H
 
def qaoa_ansatz(params, graph):
    """QAOA p-layer ansatz"""
    gamma, beta = params.reshape(2, -1)
    for i in range(p):
        # Phase separator
        for (u, v) in graph.edges:
            qml.CNOT(wires=[u, v])
            qml.RZ(2 * gamma[i], wires=v)
            qml.CNOT(wires=[u, v])
        # Mixer
        for node in graph.nodes:
            qml.RX(2 * beta[i], wires=node)

Hybrid Quantum-Classical Pipeline

Arsitektur Hybrid

┌──────────────────────────────────────────────────────────┐
│                    CLASSICAL LAYER                         │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐  │
│  │ Pre-     │  │ Feature  │  │ Post-    │  │ Evaluasi │  │
│  │ process  │─►│ Extract  │─►│ process  │─►│ & Vote   │  │
│  └──────────┘  └────┬─────┘  └──────────┘  └──────────┘  │
│                      │                                      │
│                      ▼                                      │
│  ┌──────────────────────────────────────────────────────┐   │
│  │              QUANTUM LAYER (QNN)                      │   │
│  │  |0⟩ ── Encoding ── Variational ── Measurement       │   │
│  └──────────────────────────────────────────────────────┘   │
└──────────────────────────────────────────────────────────┘

Mengapa hybrid?

  • Pre-process: Classical dimension reduction (PCA) → kurangi qubit needed
  • Feature extract: Classical NN extract feature → quantum classify
  • Post-process: Classical ensemble voting dari multiple quantum circuits
  • Error mitigation: Classical-zero-noise extrapolation (ZNE)

Open Problems & Frontier

ProblemStatusImpact if Solved
Barren Plateau proofPartial (conjecture + some proofs)Enable deep QNN
Quantum advantage for MLNOT YET PROVENJustify quantum investment
Efficient gradient estimationParameter shift rule worksBut circuits per step
Error mitigation at scaleZNE, PEC work for< 100 qubits
Quantum data loadingQRAM not built yetBottleneck for amplitude encoding
Feature map design theoryHeuristic onlySystematic QML architecture search
Trainability guaranteesOpenPredict if QNN will converge

Peta Jalan Realistis

TahunMilestone
2026-2027NISQ devices 1000+ qubits (IBM), error-corrected prototypes
2028-2029QML beats classical on synthetic quantum data
2030+Fault-tolerant quantum → Shor + Grover-scale
?QML beats classical on real-world classical data

Catatan Terkait


Prinsip Praktis

QML hari ini adalah eksperimen, bukan produksi. Jika classical ML sudah memberikan solusi yang memadai, gunakan classical. QML layak dicoba ketika: (a) data Anda memiliki struktur quantum (kimia, fisika partikel), (b) problem classical sangat mahal secara komputasi, (c) Anda siap dengan noise, barren plateau, dan scaling yang belum terbukti. Kerangka berpikir yang benar: “Bisakah quantum membantu?” bukan “Ayo kita quantum-kan semuanya.” HHL dan VQE adalah early wins; QNN masih mencari pijakan.