Kuantum fonksiyonları — parametrik model, maliyet ve gradyan hattı
PennyLane’i yalnızca “kapıları sırayla uygula” düşüncesiyle okumak, platformun asıl gücünü gizler. Bu kütüphane öncelikle differentiable quantum programming ve hibrit kuantum–klasik makine öğrenmesi için tasarlanmıştır: kuantum tarafı, klasik optimizasyonun ve otomatik türevin içine gömülebilen parametrik bir ileri geçiş olarak yazılır. Bu sayfadaki “kuantum fonksiyonu”, @qml.qnode ile sarılmış Python gövdesidir; odak eğitilebilir ağırlıklar, maliyet minimizasyonu, gradyan akışı ve Torch / JAX / TensorFlow ekosistemleriyle köprüdür — donanım yönlendirme veya transpiler ayrıntıları burada merkezde değildir.
Differentiable QP ve Hibrit QML Platformu Olarak PennyLane
Klasik “kuantum devre programlama” anlatımında merkezde genelde talimat listesi, kayıt düzeni ve donanıma haritalama durur. PennyLane’de bu katmanlar vardır; fakat birinci sınıf hedef, kuantum çağrısını klasik hesap grafiğine bağlamak ve parametre uzayında yinelemeli iyileştirme yapmaktır. Bu yüzden kuantum fonksiyonu, devre çizicisi değil; ileri geçiş (forward) tanımıdır: girdi özellikleri veya açılar, eğitilebilir ağırlıklar ve gözlemlenebilir beklentiler birlikte maliyet fonksiyonuna beslenir.
Neden “fonksiyon” dili?
Makine öğrenmesinde model, veriden maliyete giden tanımlı bir fonksiyondur. PennyLane aynı kelimeyi bilinçli taşır: kuantum kısım da türevlenebilir (veya örneklemeyle düzgün tahmin edilebilir) bir blok olarak davranmalıdır ki PyTorch optimizasyonu veya JAX dönüşümleri anlamlı kalsın. Transpiler ayrıntıları ve donanım bağlantı haritaları, bu perspektiften yürütüm kalitesi ve gürültü modeli katmanına kayar; öğrenme dinamiğinin merkezinde değildir.
Kuantum Fonksiyonunun Kimliği: Optimize Edilebilir Kuantum Model
Bir kuantum fonksiyonu gövdesinde, öğrenilecek büyüklükler genelde rotasyon açıları, katman tekrarları veya gömme (embedding) vektörlerinin parçaları olarak girer. Bunlar klasik optimizasyon dilinde ağırlık veya hiperparametre gibi davranır; fark, ileri geçişin bir simülatör veya donanım üzerinden expval, probs veya örnekleme çıktıları üretmesidir. Amaç, bu çıktıları bir maliyet ile skalarlaştırıp gradiyan tabanlı veya örnekleme tabanlı yöntemlerle küçültmektir.
Varyasyonel öğrenme ve maliyet minimizasyonu
VQE, QAOA veya kuantum sinir ağı (QNN) eğitimi aynı iskelette buluşur: parametre vektörü θ, kuantum ileri geçiş f(θ), gözlemlenebilir beklentiler ⟨Oᵢ⟩(θ), klasik tarafında birleştirici L(θ). PennyLane’de L çoğu zaman doğrudan QNode çıktılarından veya bunların Torch tensörlerinden kurulur. Optimizasyon dinamiği (öğrenme oranı, yerel minimumlar, plato) klasik derin öğrenme ile aynı sezgisel çerçevede düşünülür; kuantum taraf ekstra gürültü ve örnek maliyeti getirir.
QNode Gövdesi ve Kayıtlanabilir Akış
Kuantum fonksiyonu, QNode ile sarıldığında gövde kayıt modunda yorumlanır: Python kontrol akışı ile birlikte tensör işlemleri, kapı çağrıları ve şablonlar soyut bir iş listesine dönüşür. Eğitim perspektifinden kritik olan, gövdenin parametreleri tensör grafiğine bağlayabilmesi ve dönüş satırının maliyetin türevlenebilir parçası olmasıdır. Kablo sırası ve tensör boyutları hata ayıklamada önemlidir; bunlar kablo yönetimi başlığında toplanır.
Dinamik grafikler ve eğitim
Python if / döngüleriyle şekil değiştiren modeller, eğitim sırasında farklı kayıtlar üretebilir. Bu, klasik “sabit devre + job” düzeninden ayrışır; PennyLane tarafında kuantum betikleri ve yürütüm politikaları ile ele alınır. Basit varyasyonel modellerde gövde genelde sabit şablondur; derin hibrit mimarilerde ise kuantum blok, klasik ağın ara temsilini besler.
Şablonlar, Katmanlar ve Kuantum Sinir Ağı Düşüncesi
qml.templates ailesi, tekrarlayan varyasyonel yapıları katman olarak paketler: örneğin gömme ardından dolaştırıcı bloklar. Bu, PyTorch’taki nn.Module yığınına benzer bir tasarım dilidir; fark, katmanın ünite evrimi ve ölçülebilir okumasıyla tanımlı olmasıdır. QNN düşüncesi, birden çok kuantum katmanının klasik ön/son işlemlerle çevrelendiği hibrit bir eğitim boru hattı olarak anlaşılmalıdır.
Şablon seçimi ve ifade gücü
Hangi şablonun seçileceği, ansatz ailesi ve donanım dostu derinlik arasındaki takastır; burada donanım routing tablosu değil, gradyan ölçeği ve örnek sayısı ön plandadır. Derin katmanlar bazen bariz klasik benzetmelere rağmen kuantum eğimini yumuşatır veya vanishing gradient benzeri zorluklar doğurur; pratikte mimari arama ve düzenlileştirme (regularization) klasik MLOps ile aynı masada durur.
Maliyet Yüzeyi ve Eğitim Hattı
Eğitim hattı tipik olarak şu döngüyü tekrarlar: veri (veya sabit Hamiltonyen gömme vektörü) → kuantum ileri geçiş → skalar veya vektör maliyet → ters yönde gradyan sinyali → optimizasyon adımı. PennyLane’de maliyet, çoğu zaman QNode çıktısının Torch/JAX/TF üzerinde yazılmış basit bir cebirsel birleşimidir. Örneklemeli maliyetlerde gradyanın anlamı yönteme bağlıdır; bu yüzden diff_method ve shots seçimleri eğitim stabilitesini doğrudan etkiler (ayrıntı ölçüm süreci ve yürütüm akışı sayfalarında).
Toplu iş (batch) ve genelleme
Kuantum veri setleri küçük olduğunda bile, Torch tarafında toplu tensörler üzerinden döngü kurmak yaygındır. PennyLane’in yayın (broadcast) kuralları, aynı QNode’u birden çok girdi satırına genişleterek klasik mini-batch kültürüyle hizalanmanıza yardım eder; maliyet ise toplu ortalama veya ağırlıklı toplam olarak tanımlanır.
Gradyan Akışı, Otomatik Türev ve diff_method
Differentiable quantum programming’in kalbi, kuantum bloktan klasik maliyete uzanan gradiyan akışıdır. Simülatörde backprop benzeri yollar, durum grafiğini otograd ile birleştirir; donanımda veya örneklemeli rejimde ise parameter-shift gibi yöntemler ek değerlendirmelerle tahmin üretir. QNode, bu yöntemi seçilen arayüz ve cihazla tutarlı kılar; siz maliyeti yazar, otograd motoru (Torch, JAX, TF) veya PennyLane’in kendi NumPy yolu gradyanı taşır.
Autograd entegrasyonu
Autograd entegrasyonu, kuantum çıktısının üzerinde klasik türev zincirinin devam edebilmesi demektir: örneğin Torch’ta requires_grad=True tensörler, JAX’ta jax.grad veya dönüşüm tabanlı jax.jit ile sarılmış eğitim fonksiyonları, TensorFlow’da GradientTape. PennyLane’in rolü, bu zincirde kuantum alt grafiğin türevini tanımlı ve sayısal olarak kararlı biçimde sağlamaktır.
Hibrit Klasik–Kuantum İş Akışı
Hibrit iş akışı, tek bir QNode çağrısından ibaret değildir: klasik ön işleme (özellik çıkarımı), kuantum blok, klasik son işleme (logit, kayıp) ve optimizasyon adımı bir boru hattı oluşturur. Varyasyonel kuantum eigensolver tarzı problemlerde Hamiltonyen terimleri klasik olarak toplanır; kuantum devre yalnızca beklenti tahmini sağlar. QNN tarafında ise klasik katmanlar ile kuantum katmanlar sırayla veya paralel dallanmış biçimde birleşebilir.
PyTorch, JAX ve TensorFlow ile Hibrit ML Köprüleri
PennyLane’in interface bağımsız değişkeni, kuantum fonksiyonunun hangi otograd evrenine bağlanacağını seçer. PyTorch ekosisteminde, optimizasyon rutinleri (torch.optim), modüler modeller ve GPU üzerinde tensör işlemleri doğal şekilde devreye girer. JAX tarafında, jit, vmap ve fonksiyonel optimizasyon (Optax vb.) ile yüksek performanslı eğitim hatları kurulabilir. TensorFlow kullanıcıları ise GradientTape ve Keras benzeri bileşenlerle aynı deseni izler.
Pratik seçim ölçütleri
Araştırma prototiplerinde Torch hızlı döngü sunar; büyük toplu JAX türevleri ve derleme (JIT) ile ölçeklenebilir. Seçim, ekibin alıştığı ML yığınına ve kuantum simülatörünün bellek profiline bağlıdır. Resmî arayüz rehberleri için PennyLane belgelerindeki Torch, JAX ve TensorFlow girişlerine bakın.
Kod: Torch ve JAX Eğitim İskeletleri
Aşağıdaki örnekler yürütücü sürümünden bağımsız eğitim hattı iskeleti gösterir: Torch’ta otograd ve optimizasyon adımı; JAX’ta saf fonksiyonel maliyet ve jax.grad. Gerçek projelerde veri yükleyici, erken durdurma ve günlükleme eklenir.
import torch
import pennylane as qml
n_wires = 2
dev = qml.device("default.qubit", wires=n_wires)
@qml.qnode(dev, interface="torch", diff_method="backprop")
def quantum_model(weights):
# Tek katmanlı varyasyonel iskelet: ağırlıklar tensör grafiğine bağlı kalır.
qml.BasicEntanglerLayers(weights, wires=range(n_wires))
return qml.expval(qml.PauliZ(0))
# (1, n_wires) şeklinde başlangıç ağırlıkları; öğrenilebilir tensör.
weights = torch.tensor([[0.3, 0.6]], requires_grad=True)
opt = torch.optim.Adam([weights], lr=0.15)
for step in range(40):
opt.zero_grad(set_to_none=True)
loss = quantum_model(weights) # skalar maliyet örneği
loss.backward()
opt.step()
import jax
import jax.numpy as jnp
import pennylane as qml
from jax import grad
n_wires = 2
dev = qml.device("default.qubit", wires=n_wires)
@qml.qnode(dev, interface="jax", diff_method="backprop")
def quantum_model(weights):
qml.BasicEntanglerLayers(weights, wires=range(n_wires))
return qml.expval(qml.PauliZ(0))
def loss_fn(w):
return quantum_model(w)
w = jnp.array([[0.3, 0.6]])
g = grad(loss_fn)(w) # kuantum + JAX türev zinciri
Şablon ayrıntıları ve ağırlık şekilleri için PennyLane şablon kataloğuna bakın; kayıt içeriğinin nasıl oluştuğu için devre kaydı ve tape sistemi sayfalarına geçin.
İleride ve Yan Sayfalarda Ne Var?
Bu sayfa kuantum fonksiyonunu eğitim ve hibrit ML gözlüğünden okur. Aşağıdaki bağlantılar aynı birimde tamamlayıcı başlıklardır; Qiskit tarafında düşük seviye devre ve backend anlatımı ayrı ağaçta tutulmuştur.
- QNode mimarisi — çağrılabilir sınır ve sözleşme.
- Cihaz sistemi — simülatör ve donanım bağlamı, gürültü ve örneklemeyi eğitime yansıtma.
- Yürütüm akışı — kayıt, türev ve yürütmenin zaman sırası.
- Devre kaydı ve tape sistemi — soyut iş listesi ve dönüşümler.
- Kuantum betikleri — dinamik kontrol akışı ve eğitim döngüsü etkileşimi.