Kuantum Faz Tahmini (QPE)
QPE, bir üniter operatörün özdeğerindeki görünmez fazı yakalayıp ölçülebilir bit dizisine çevirir. Temelde iki register’ın “dansı” vardır: üstte hassasiyet (counting) register’ı, altta özvektör (state) register’ı.
Kuantum Faz Tahmini (QPE) nedir?
QPE, bir üniter operatörün özvektörü verildiğinde, ilgili özdeğerin fazını bulma problemidir:
Buradaki faz, tek başına doğrudan “ölçülemez”. QPE’nin yaptığı şey, bu faz bilgisini üst register’a faz geri tepmesi ile “yazmak” ve ardından IQFT ile bit dizisine çevirmektir.
Neden bu algoritmayı kullanıyoruz?
Klasik dünyada büyük bir matrisin özdeğer/özvektör yapısını çıkarmak, boyut arttıkça hızla zorlaşır (çoğu durumda üstel maliyet). QPE ise kuantum paralelliğini kullanarak fazı, seçtiğiniz hassasiyet seviyesine göre polinom zamanda tahmin edebilir.
Mimari yapı: iki register’ın dansı
QPE devresi iki ayrı register arasında hassas bir köprü kurar. Üst register fazı “ölçmek” için hazırlanır; alt register ise ’nun özvektörünü taşır.
-
Hassasiyet register’ı (counting)
Üstteki kübit, fazı hangi çözünürlükte okuyacağımızı belirler. Kübit sayısı arttıkça, ikili kesir olarak daha çok basamakla yakalanır.
-
Özvektör register’ı (state)
Alttaki kübit(ler), operatörünün özvektörünü taşır. Bu örnekte tek kübitlik hazırlıyoruz.
Algoritmanın kalbi: kontrollü‑U güçleri
Üstteki her kübit, alttaki register üzerine operatörünü artan kuvvetlerde kontrollü uygular: . Bu tasarım “ikili sayı sistemi” mantığıyla fazın basamaklarını üst register’a kodlar.
Qiskit kod örneği
Aşağıdaki örnekte ’yu, tek kübitlik bir kontrollü faz kapısı (cp(angle)) ile temsil ediyoruz. Hedef faz olarak seçilirse, 3 bit hassasiyetle beklenen çıktı 001 (ikili) civarında yoğunlaşır.
import numpy as np
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
from qiskit.circuit.library import QFT
def qpe_circuit(precision, angle):
# Toplam: precision (t) + 1 (state)
qc = QuantumCircuit(precision + 1, precision)
# 1. State Register Hazırlığı: Özvektörü |1> yapıyoruz
qc.x(precision)
# 2. Precision Register Hazırlığı: Hadamard katmanı
qc.h(range(precision))
qc.barrier()
# 3. Kontrollü-U Uygulaması (Gizli fazı içeren kapı)
repetitions = 1
for counting_qubit in range(precision):
for i in range(repetitions):
# Buradaki cp(angle) gizli fazımızı temsil eder
qc.cp(angle, counting_qubit, precision)
repetitions *= 2
qc.barrier()
# 4. Ters QFT (IQFT): Fazı bitlere dönüştür
qc.append(QFT(precision).inverse(), range(precision))
# 5. Ölçüm
qc.measure(range(precision), range(precision))
return qc
# 1/8 fazını tahmin edelim (Beklenen sonuç: 001 binary)
target_angle = 2 * np.pi * (1/8)
qc = qpe_circuit(3, target_angle)
# Simülasyon
simulator = AerSimulator()
counts = simulator.run(qc, shots=1024).result().get_counts()
print(f"Tahmin Edilen Faz (Binary): {counts}")
Kod analizi: satır satır sezgi
Düzen · hangi register neyi yapıyor?
Devrede toplam precision + 1 kübit var. İlk precision kübit “counting” (ölçülecek bitler), son kübit ise “state” register. Kodda bu son kübiti qc.x(precision) ile |1⟩ yapıyoruz.
Kontrollü‑U tekrarları · neden 1,2,4…?
repetitions değişkeni her counting kübiti için ikiye katlanır. Bu, uygulamakla aynı etkiye sahiptir. Böylece faz, üst register’a ikili basamaklar şeklinde “katman katman” yazılır.
Burada küçük bir matematiksel resim var: eğer ise, . Yani “kuvvet” büyüdükçe faz da ile büyür; bu büyümeyi IQFT, bit basamaklarına çözer.
Kontrol–hedef yönü · cp(angle) hangi fazı ekliyor?
Qiskit’te qc.cp(angle, control, target), yalnızca control=1 ve target=1 iken faz ekler. Bizim devrede “target” olarak state kübiti var ve onu |1⟩’e hazırlıyoruz. Böylece counting kübiti 1 olduğunda, state üzerinden faz birikir ve phase kickback ile counting fazı değişir.
IQFT · fazı bite çeviren adım
Kontrollü‑ katmanından sonra counting register faz bilgisini taşır ama hâlâ “faz uzayı” temsilindedir. QFT(precision).inverse() (IQFT) bunu ölçülebilir bit dizisine dönüştürür.
Bit sırası (endianness) · “001” neyi temsil ediyor?
Ölçüm çıktısındaki bit dizisinin yorumlanması, framework’teki bit sıralamasıyla ilgilidir. Qiskit’te get_counts() anahtarları çoğu zaman “klasik bit dizisini” string olarak verir; bu string’in hangi bitinin p0 / p1 / p2’ye denk geldiğini, measure(q, c) eşlemesi belirler. Bu sayfada measure(range(precision), range(precision)) ile bire bir eşledik; bu yüzden baskın desenin “001” civarında olması, için beklediğimiz ikili kesirle uyumludur.
-
Tam ikili kesir olmayan faz
target_angle için gibi bir değer seç. Ölçüm artık tek bir bit deseninde kilitlenmez; en yakın iki/üç desene yayılır.
-
Hassasiyet artır
precision’ı 3 → 4/5 yapınca dağılımın daha “keskin” hale geldiğini görürsün.
-
IQFT’yi kaldır
IQFT olmadan counting register faz uzayında kalır; ölçüm, anlamlı bir ikili tahmin vermek yerine daha dağınık görünür.
Devre ve doğrulama
Aşağıdaki şema, 3 bit hassasiyetli QPE iskeletini gösterir: üstte Hadamard katmanı, ortada kontrollü blokları ve sonda IQFT. Blokların üzerindeki etiketleri, “ikili basamak” mantığını görünür kılar.
Şemayı adım adım oku
-
Counting register’ı süperpozisyona al
Üstteki kübite Hadamard uygula. Bu, fazı yazacağımız “boş sayfa”yı açar.
-
Kontrollü katmanını uygula
Her üst kübit, alttaki üzerine ’yu artan kuvvetlerde uygular. Faz bilgisi phase kickback ile üst register’a kodlanır.
-
IQFT ile fazı bite çevir
Counting register faz uzayındadır; IQFT, bunu ölçümle okunabilir ikili sayıya çevirir.
-
Ölç ve en olası bit desenini oku
Ölçüm sonucundaki baskın bit dizisi, ’nın ikili kesir tahminidir. tam ikili kesir değilse dağılım “komşu” değerlere yayılır.
Hedef:
- precision: 3 bit
- beklenen baskın çıktı: 001
- faz kapısı: cp(angle)
Simülasyonda counts sözlüğünde 001 etrafında yoğunlaşma görmelisiniz. Açı tam ikili kesir değilse, iki komşu bit desenine doğru dağılım oluşabilir.
Teknik derinlik ve içerik notları
-
Faz geri tepmesi (phase kickback)
Kontrollü‑ uygulandığında alt register özvektör olarak kalır; fakat faz, kontrol kübitinin fazına yazılır. QPE’nin “ölçemediğini ölçer gibi” yapmasının ana nedeni budur.
-
Hassasiyet vs. hata
her zaman biçiminde olmayabilir. Bu durumda ölçümde tek bir bit dizisi yerine en yakın değerlere yayılan bir dağılım görürsünüz. Her ek precision kübiti çözünürlüğü artırır, dağılımı daraltır.
-
Shor’a köprü
Shor algoritmasının periyot bulma kısmı, QPE mekanizmasının modüler aritmetik operatörüne uygulanmış halidir. Bu yüzden QPE, “periyot teması”nın merkezinde durur.
-
Görsel tasarım ipucu
Şemada kontrollü‑ bloklarının üstüne yazmak, algoritmanın ikili sayı sistemiyle nasıl çalıştığını tek bakışta hissettirir.