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 normalize faz kesrini tahmin etme problemidir. Burada “özdeğerin fazı”, özdeğerin tamamını değil; birim çember üzerindeki konumu ifade eden üssü belirtir (aşağıdaki köşe kutusu).
Sonlu boyutta bir üniter operatörün her özdeğeri , karmaşık düzlemde birim çember üzerindedir: . Bu yüzden her özdeğeri tek bir tam tur içindeki konumla kodlamak doğaldır: . bir radyan açısı değildir; radyanın kaçıncı kesrine denk geldiğini söyleyen tam tur kesridir (İngilizce literatürde “phase fraction” / “normalized phase”). Örneğin , karmaşık düzlemde çeyrek tur ( radyan) anlamına gelir.
tam olarak bu özdeğere ait bir özvektör ise yazılır; yukarıdaki parametrizasyonla bu, ile aynı şeydir. Pratikte genelde bir oracle/hazırlık devresiyle yaklaşık olarak hazırlanır; QPE’nin hata analizi bu yakınlığı da hesaba katar.
Özdeğer olduğunda üssün sanal kısmı fazı taşır; klasik olarak tek ölçümle bu üssü doğrudan okuyamazsınız. QPE’nin yaptığı şey, bu faz bilgisini üst register’a faz geri tepmesi ile “yazmak” ve ardından IQFT ile bit dizisine çevirmektir (3 · Mimari, 4 · Kontrollü‑U, IQFT).
Neden Bu Algoritmayı Kullanıyoruz?
Klasik dünyada devasa bir matrisin tüm özdeğer/özvektör yapısını genel olarak çıkarmak, boyut büyüdükçe çok pahalıdır; tam spektrum ya da çok sayıda özçifti hedefleyen yöntemlerde maliyet sıklıkla boyuta karşı üstel veya en azından “istediğiniz kesinliği her zaman ucuz tutamazsınız” rejimine kayar. QPE ise aynı problemi çözmeyi iddia etmez: tek bir özdeğerin faz kesrini, verilen bir özvektör üzerinde ve kontrollü ünite uygulamalarıyla okumayı hedefler.
Bu farkı net tutmak önemlidir. QPE’nin girdi modeli kabaca şöyledir: ünite ve onun bir özvektörüne yakın bir durum hazırlanabiliyor; devre de biçiminde kontrollü uygulanabiliyor. Bu koşullarda, üst register’a yazılan faz bilgisini IQFT ile bit dizisine çevirmek; hassasiyet kübiti sayısı ile seçilen çözünürlükte polinom (tipik olarak kapı, QFT varsayımıyla) ölçeklenir — ama buradaki “polinom”, kontrollü bloğunun kendi maliyetine ek olarak gelir; oracle ağırsa QPE de ağırdır.
Özetle motivasyon: faz, birçok ileri algoritmanın “gizli parametresi”dir (1 · QPE nedir?). Klasik yoldan bu parametreyi çıkarmak zor olabilir; QPE ise doğru hazırlık altında onu ölçülebilir bir bit desenine taşımak için standart bir şablondur — sonraki bölümlerde bu şablonun register’lara ve kontrollü güçlere nasıl yayıldığını açıyoruz.
Mimari Yapı: İki Register’ın Dansı
QPE devresi iki ayrı register arasında bir köprü kurar: üst hatlar fazı “ölçülebilir biçimde kodlamak” için seçilir; alt hatlar ’nun özvektörünü taşıyacak şekilde hazırlanır. Asıl “ağ” ise iki grubu birbirine bağlayan çok kübitli ünite bloklarıdır; klasik anlamda iki kablo arasında veri aktaran bir yol değil, tensör uzayında ortak uygulanan kontrollü kapılardır.
Tipik akış şöyle düşünülür: önce alt register’da (veya buna yakın bir durum) hazırlanır; ardından üst register’a Hadamard katmanı gelir ki hassasiyet kübitleri süperpozisyonda “hangi deneyi yapıyorum?” dalını seçebilsin. Köprü aşamasında üstteki her kübit, alttaki register üzerinde üniteyi belirli bir üssün altında koşullu uygular — bu blokların tam sırası ve üssün seçimi 4 · Kontrollü‑U bölümünde açılır; burada önemli olan, iki tarafın tek tek klasik bit dizisi gibi değil, ortak kuantum durumu olarak bağlanmasıdır.
Köprünün taşıdığı şey doğrudan “alt kübitler → üst kübitlere kopyalanan klasik bilgi” değildir: özdeğere bağlı faz, kontrollü uygulamaları sırasında faz geri tepmesiyle üst hattaki göreli fazlara yazılır; alt register çoğu kurulumda özvektör üzerinde kalır. Bundan sonra IQFT yalnızca üst register üzerinde çalışır ve faz desenini klasik okunaklı bir bit etiketine dönüştürür — yani “ağın çıktısı” ölçüm öncesi üstte toplanan faz ilişkileridir.
-
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. Başta Hadamard ile açılan bu hatlar, köprü boyunca alttaki ünite deneylerinin sonucunu kendi fazlarında biriktirir; sonda IQFT bu birikimi düzenler.
-
Ö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. Köprü sırasında bu hatlar ünite kapılarının hedef uzayıdır; kontrol ise üst hassasiyet kübitlerinden gelir.
-
Çapraz bloklar — köprünün kendisi
İki register’ı gerçekten birbirine bağlayan şey, çok kübitli kontrollü‑ kapılarıdır: kontrol üstte, ünite gücü altta. Böylece alt özvektör üzerinde yapılan “aynı dal içinde” ünite işlemleri, üstte girişim yapabilecek göreli fazlara dönüşür. Bu mekanizmanın adı literatürde faz geri tepmesidir; iç yüzeyini 4 · Kontrollü‑U özetinde topluyoruz.
Algoritmanın Kalbi: Kontrollü‑U Güçleri
Üstteki her kübit, alttaki register üzerine operatörünü artan kuvvetlerde kontrollü uygular: . Bu düzen, ’nın (normalize) ikilik kesrini okumak için gereken ikilik ayrıştırmayı devreye gömer: her üst hat, farklı bir ölçeğinde bir faz farkı taşır.
bir özvektör ve ise, aynı durum üzerinde özdeğer fazını tam tur kesrine kadar “büyütür”. Kontrollü uygulama bu fazı — klasik kabloyla değil, dolanıklık ve girişim yoluyla — ilgili üst kübitin göreli fazına aktarır; alttaki dal özvektör üzerinde kalır, bu yüzden ölçüm bazında çoğu zaman “aynı ” izlenimi verir.
Sayfadaki öğretici kodda bu güçler, iç içe döngüyle aynı fiziksel kapıyı birden çok kez uygulayarak (repetitions) kurulur; böylece üstteki her counting hattı için toplam etki olur. Satır satır denklem ve cp yorumunu 7 · Kod analizi bölümünde kilitleyeceğiz; burada odak, “neden tam olarak bu üsler?” sorusunun cevabıdır.
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)
# Sayfadaki tek şerit metin şema ile aynı (varsayılan print(qc) bazen »/« böler):
# print(qc.draw(output="text", fold=-1))
# Simülasyon
simulator = AerSimulator()
counts = simulator.run(qc, shots=1024).result().get_counts()
print(f"Tahmin Edilen Faz (Binary): {counts}")
Terminal çıktısı (print(qc))
Yukarıdaki editördeki qpe_circuit(3, θ) ile kurulan devrenin metin şeması; varsayılan print(qc) çıktısı çok geniş devreleri » / « ile ikinci panele bölebilir. Burada tek yatay şerit için Qiskit çiziminde fold=-1 kullanıldı (qc.draw(output="text", fold=-1)). Özet çizim için 8 · Devre ve Doğrulama SVG’sine bakın.
draw(text, fold=-1) · Qiskit · t=3 · θ=2π/8
┌───┐ ░ ░ ┌───────┐┌─┐
q_0: ┤ H ├─░──■──────────────────────────────────────────────────────────────░─┤0 ├┤M├──────
├───┤ ░ │ ░ │ │└╥┘┌─┐
q_1: ┤ H ├─░──┼────────■────────■────────────────────────────────────────────░─┤1 IQFT ├─╫─┤M├───
├───┤ ░ │ │ │ ░ │ │ ║ └╥┘┌─┐
q_2: ┤ H ├─░──┼────────┼────────┼────────■────────■────────■────────■────────░─┤2 ├─╫──╫─┤M├
├───┤ ░ │P(π/4) │P(π/4) │P(π/4) │P(π/4) │P(π/4) │P(π/4) │P(π/4) ░ └───────┘ ║ ║ └╥┘
q_3: ┤ X ├─░──■────────■────────■────────■────────■────────■────────■────────░───────────╫──╫──╫─
└───┘ ░ ░ ║ ║ ║
c: 3/════════════════════════════════════════════════════════════════════════════════════╩══╩══╩═
0 1 2
H · state · X CP · merdiven IQFT · M
Kod Analizi
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.
Yukarıdaki qpe_circuit(precision, angle) iskeletinde küçük değişiklikler yaparak histogramı (olasılık dağılımını) kasıtlı olarak bozun. Kodda angle, cp için radyan cinsinden fazdır; normalize kesir ile bağlantı angle = 2π·θ (örnekteki target_angle = 2*np.pi*(1/8) satırı). Böylece “matematikteki θ” ile “koddaki açı” karışmaz.
-
Tam ikili kesir olmayan faz
Örneğin normalize faz için target_angle = 2*np.pi*(1/10) verin. t kübitlik hassasiyet, ’yı her zaman tam olarak ikili kesir olarak yazamaz; ölçüm tek bir bit string’e kilitlenmek yerine en yakın birkaç desene yayılır — bu, “yuvarlama / yakın rasyonel” davranışının simülatör histogramındaki yüzüdür.
-
Hassasiyet artır
qpe_circuit(3, …) ile başlayıp ilk argümanı 4 veya 5 yapın (aynı target_angle ile). Daha fazla counting kübiti, ’nın ikili genişletmesine daha ince basamak ekler; dağılım genelde daha “keskin” (daha az yayılmış) görünür — devre derinliği ve kapı sayısı da artar.
-
IQFT’yi kaldır
qc.append(QFT(precision).inverse(), …) satırını geçici olarak yorum satırı yapın veya silin. Kontrollü‑ katmanından sonra counting register hâlâ “faz bilgisini taşıyan” bir süperpozisyondadır; IQFT olmadan ölçüm, anlamlı bir ikili tahmin yerine çoğu zaman daha dağınık bir pattern verir — yukarıdaki «IQFT · fazı bite çeviren adım» paragrafının pratik doğrulamasıdır.
-
State’i yanlış hazırla
Bu öğretici devrede qc.x(precision) satırı, state kübitini |1⟩ yaparak cp(angle, …) yolunu “etkin” kılar. Bu satırı kaldırıp state’i |0⟩’da bırakın: bu küçük modelde faz geri tepmesi beklediğiniz gibi oluşmaz; histogram genelde referans 001 civarından uzaklaşır. Böylece QPE’de özvektör hazırlığının ne kadar kritik olduğunu aynı dosyada izleyebilirsiniz.
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. Qiskit’in tam metin şeması (IQFT ve ölçüm kolonları dahil) için 6 · Terminal çıktısı (print(qc)) bölümüne bakın.
Ş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 İç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.