Advanced Quantum Machine Learning

quantum_debugger.qml.advanced collects advanced QML models and diagnostics. All are real circuit-based implementations trained with exact parameter-shift gradients.

from quantum_debugger.qml.advanced import (
    DataReuploadingClassifier, QuantumAutoencoder, QCNN,
    expressibility, entangling_capability, gradient_variance,
)

Data Re-uploading Classifier

Re-encodes the input data before every variational layer (Perez-Salinas et al.), which sharply increases expressivity – it can learn nonlinearly-separable data that single-encoding circuits cannot.

from sklearn.datasets import make_circles
import numpy as np

X, y = make_circles(n_samples=100, noise=0.05, factor=0.3)
clf = DataReuploadingClassifier(n_qubits=2, n_layers=5, learning_rate=0.15)
clf.fit(X * np.pi, y, epochs=60)
clf.score(X * np.pi, y)          # ~0.9 on concentric circles

Quantum Autoencoder

Compresses n qubits into n - n_trash qubits by training the trash qubits to end up in |0> (Romero et al.). inputs is an array of state vectors.

ae = QuantumAutoencoder(n_qubits=3, n_trash=1, n_layers=4)
ae.fit(inputs, epochs=60)
ae.trash_fidelity(inputs)        # -> ~1.0 for compressible data
compressed = ae.encode(inputs[0])

Quantum Convolutional Neural Network

Alternating convolution and pooling layers halve the active qubits toward a single readout qubit (Cong et al.).

clf = QCNN(n_qubits=4, learning_rate=0.1)   # n_qubits must be a power of 2
clf.fit(X, y, epochs=50)
clf.score(X, y)

Variational Quantum Classifier (multi-class)

A general K-class classifier: angle-encode the input, apply a variational ansatz, softmax the Pauli-Z expectations of K readout qubits, and train with the cross-entropy loss.

from quantum_debugger.qml.advanced import VariationalQuantumClassifier

clf = VariationalQuantumClassifier(n_qubits=3, n_classes=3, n_layers=3)
clf.fit(X, y, epochs=40)         # y in {0, 1, 2}
clf.predict_proba(X)             # (n_samples, 3), rows sum to 1

Ansatz Analysis

Quantitative diagnostics for variational circuits:

expressibility(n_qubits=3, n_layers=4)        # KL to Haar; smaller = more expressible
entangling_capability(n_qubits=3, n_layers=3) # Meyer-Wallach Q in [0, 1]
gradient_variance(n_qubits=6, n_layers=6)      # barren-plateau probe (shrinks with n)
  • Expressibility decreases (toward 0) as circuits get deeper.

  • Entangling capability increases with entangling depth.

  • Gradient variance decays exponentially with the qubit count in a barren plateau – use it to check whether an ansatz is trainable at scale.