1. Ana sayfa
  2. Algoritmalar
  3. Bell ve iletişim
  4. Swap testi · Qiskit
Bell ve iletişim · Qiskit

Swap testi — durumlara dokunmadan benzerlik ölçmek

İki kuantum durumunu doğrudan ölçmek onları bozar; Swap testi, bir yardımcı kübit ve Fredkin (CSWAP) kapısı yardımıyla iki durumun örtüşmesini klasik bir olasılığa dönüştürür. Sonuç bir mesaj değildir; durumlar arasındaki geometrik mesafenin sayısal bir özetidir.

  • Çerçeve: Qiskit
  • 3 kübit (1 ancilla + 2 karşılaştırılan)
  • 3 kapı: H, CSWAP, H
  • ~6 dk okuma

Swap testi nedir? (derinlemesine analiz)

Swap testi, iki kuantum durumunun (state) birbirine olan yakınlığını — yani fidelity'sini (Türkçesiyle sadakat ya da benzerlik derecesi) — ölçmek için kullanılan temel bir protokoldür. Klasik dünyada iki dosyayı karşılaştırmak için bitlerini tek tek kontrol ederiz; ne var ki kuantum dünyasında bir durumu doğrudan ölçmek o durumu bozar. Swap testi tam da bu yüzden vardır: iki durumu “birbirine değdirmeden” aralarındaki örtüşmeyi okumamızı sağlar.

Çıktı, kübitlerin içeriği değildir; yalnızca yardımcı (ancilla) kübitin ölçüm istatistiğidir. Bu istatistik, iki sistemin geometrik mesafesini klasik bir olasılığa çevirir; sayfa boyunca buna kısaca örtüşme (overlap) diyeceğiz.

Anahtar fikir Swap testi “aynı mı?” sorusuna doğrudan evet/hayır yanıt vermez; iki durumun ne kadar üst üste bindiğini sayısal olarak söyler. Aynı durumlar için her zaman 0; tamamen dik durumlar için 0/1 ~%50 dağılımı beklenir.

Neden kullanılır?

Kuantum makine öğrenmesinden (QML) hata düzeltme kodlarına kadar üç tipik kullanımı vardır:

  • Kuantum benzerlik ölçümü

    İki kuantum verisi arasındaki mesafeyi sayısal bir overlap'e dönüştürmek; kuantum kernel yöntemlerinin temel taşıdır.

  • Durum karşılaştırma

    Bilinmeyen bir durumun, hazırlanmış bir referans duruma ne kadar yakın olduğunu — durumu okumadan — değerlendirmek.

  • Girişim ölçümü

    İki durumun üst üste binme (overlap) değerini Hadamard girişimi üzerinden hesaplamak.

Mesaj iletmez Swap testi yalnızca geometrik mesafeyi ölçer. Klasik bir kanal olmadan içerik aktarımı yapmaz — yorumlarken bunu dolanıklık tabanlı protokollerle karıştırmamak önemlidir.

Matematiksel temel

Swap testi'nin arkasındaki sihir Fredkin kapısı (Controlled-SWAP) ve tek bir yardımcı (ancilla) kübittir. İki durumu karşılaştırmak istiyoruz: ψ\ket{\psi} ve ϕ\ket{\phi}. Yardımcı kübit 0\ket{0}'da başlar.

Sezgi Ancilla'yı bu devrede bir “kuantum hakem” olarak düşünebilirsiniz. Kendisi doğrudan oyuna — yani ψ\ket{\psi} ve ϕ\ket{\phi} durumlarına — girmez; CSWAP kapısı aracılığıyla iki tarafı da “görür” ve finaldeki ölçümde, tarafların birbirine ne kadar uyumlu olduğuna dair gizli bir rapor sunar.
  1. Yardımcıya Hadamard H

    Ancilla, 12(0+1)\tfrac{1}{\sqrt{2}}\bigl(\ket{0}+\ket{1}\bigr) ile süperpozisyona alınır; sistemin geri kalanını denetlemek üzere hazırlanır.

  2. Fredkin (CSWAP) CSWAP

    Yardımcı kübit 1\ket{1} iken ψ\ket{\psi} ile ϕ\ket{\phi}'nin yeri değiştirilir; 0\ket{0} iken hiçbir şey yapılmaz. Bu adım sistemleri üst üste bindirme yoluyla birbirine bağlar.

  3. İkinci Hadamard ve ölçüm H

    Yardımcı kübite tekrar HH uygulanır — süperpozisyon girişime dönüşür — sonra ancilla ölçülür. Ölçüm sonucu, klasik bir olasılığa indirgenmiş overlap bilgisidir.

Matematiksel “meali”

Yardımcı kübitin 0\ket{0} ölçülme olasılığı tek bir kapalı formdadır:

P(0)=12+12ψϕ2P(0) = \tfrac{1}{2} + \tfrac{1}{2}\,\bigl|\langle\psi|\phi\rangle\bigr|^2

Geometrik bakış Bu formül, iki kuantum vektörü arasındaki açının kosinüs karesini hesaplamaya benzer. Vektörler aynı yöne bakıyorsa (aynı durumlar) aralarındaki açı 00'dır, kosinüs 11'dir ve örtüşme tamdır; birbirine dik (90°) iseler ortak yönleri yoktur, kosinüs 00'dır ve örtüşme sıfırdır. Aradaki her açı, 00 ile 11 arasında bir kısmi benzerliğe karşılık gelir.

  • Aynı durumlar

    ψ=ϕ    P(0)=1\ket{\psi} = \ket{\phi} \;\Rightarrow\; P(0) = 1

    Meal: Overlap ψϕ2=1|\langle\psi|\phi\rangle|^2 = 1 olduğundan yardımcı kübit her zaman 0 ölçülür; histogramda yalnızca 0 sütunu görünür.

  • Tamamen dik durumlar

    ψϕ=0    P(0)=12\langle\psi|\phi\rangle = 0 \;\Rightarrow\; P(0) = \tfrac{1}{2}

    Meal: Overlap sıfırdır; yardımcı kübit 0 ve 1'i ~%50–%50 dağıtır. Aradaki her ara değer kısmi benzerliğe karşılık gelir.

Geri çevirme formülü Ölçtüğümüz P(0)P(0)'dan örtüşmeyi geri okumak için ψϕ2=2P(0)1|\langle\psi|\phi\rangle|^2 = 2P(0) - 1. Kod tarafında overlap = 2 * p0 - 1 satırı tam olarak bunu yapar.

Algoritmanın adım adım reçetesi

Yapı her zaman dört adımdan oluşur. Aşağıda yardımcı kübitin ve sistemin tam durum vektörü her aşamada nasıl evrildiği özetlenmiştir.

  • Hazırlık

    Karşılaştırılacak iki kayıt — ψ\ket{\psi} ve ϕ\ket{\phi} — ile bir ancilla kübit (0\ket{0}) belirlenir. Sistem 0ψϕ\ket{0}\otimes\ket{\psi}\otimes\ket{\phi} ile başlar.

  • Hadamard sonrası (ancilla)

    Yalnızca yardımcı kübite HH uygulanır; karşılaştırılan iki kayıt değişmez:

    12(0+1)ψϕ\tfrac{1}{\sqrt{2}}\bigl(\ket{0}+\ket{1}\bigr)\otimes\ket{\psi}\otimes\ket{\phi}
  • Fredkin (CSWAP) sonrası

    Ancilla 1\ket{1} iken ψ\ket{\psi} ile ϕ\ket{\phi} yer değiştirir; 0\ket{0} iken sistem dokunulmadan kalır. Sistem ikiye dallanır:

    12(0ψϕ+1ϕψ)\tfrac{1}{\sqrt{2}}\bigl(\ket{0}\ket{\psi}\ket{\phi}+\ket{1}\ket{\phi}\ket{\psi}\bigr)
  • Girişim ve çöküş (ikinci HH)

    Ancilla'ya HH uygulandığında iki dal birbiriyle girişim yapar. 0\ket{0} ölçülmesinin olasılığı doğrudan iki durumun örtüşmesine bağlanır:

    P(0)=12+12ψϕ2P(0) = \tfrac{1}{2} + \tfrac{1}{2}\,\bigl|\langle\psi|\phi\rangle\bigr|^2

Qiskit ile uygulama

Aşağıdaki örnek uçtan uca bir Swap testi kurar: yardımcı kübiti hazırlar, iki kübiti dik bir konfigürasyona getirir, CSWAP ile girişimi tetikler ve ölçtüğü P(0)'dan overlap'i geri okur. AerSimulator üzerinde 2048 atış çalıştırılır.

swap_test.py Python
import numpy as np
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator

# 1. Devre Kurulumu: 1 yardımcı + 2 karşılaştırılacak + 1 klasik bit
qc = QuantumCircuit(3, 1)

# Karşılaştırılacak kübitleri hazırla:
# q1 = |0>, q2 = |1> (birbirine dik durumlar)
qc.x(2)
qc.barrier()

# 2. Swap Testi Başlıyor
qc.h(0)           # Yardımcı kübiti süperpozisyona al
qc.cswap(0, 1, 2) # Fredkin Kapısı (Controlled-SWAP)
qc.h(0)           # Girişimi oluştur

# 3. Ölçüm
qc.measure(0, 0)

# 4. Çalıştırma ve Sonuç
simulator = AerSimulator()
job = simulator.run(qc, shots=2048)
counts = job.result().get_counts()

print("\nSwap Testi Sonuçları:")
print(counts)

# Örtüşme (Overlap) Hesaplama: ||^2 = 2*P(0) - 1
p0 = counts.get('0', 0) / 2048
overlap = 2 * p0 - 1
print(f"Hesaplanan Benzerlik (Overlap): {max(0, overlap):.4f}")
qiskit Aer simülatörü · 2048 shot UTF-8 · LF

Kod analizi · satır satır

Importlar QuantumCircuit devre nesnemizi tutar; AerSimulator yerel makinemizde gürültüsüz bir kuantum donanımı taklit eder. numpy bu örnekte küçük bir hesap için (olasılık → overlap dönüşümü) kullanılır; daha karmaşık durum hazırlıklarında dizilerle çalışmak için Qiskit ile kol kola gider.

qc = QuantumCircuit(3, 1) Kayıt mimarisi şu: üç kübit ama yalnızca bir klasik bit. Üç kübitin ilki yardımcı (ancilla, q0); kalan ikisi karşılaştıracağımız durumları (q1, q2) tutar. Tek klasik bit, sadece ancillayı ölçeceğimiz için yeterlidir; karşılaştırılan iki kübit hiç ölçülmez — kuantum bilgileri korunur.

qc.x(2) Karşılaştırma için iki bilinen, kasten dik durum hazırlıyoruz: |0⟩ (q1, varsayılan) ve |1⟩ (q2, X kapısıyla çevrildi). Bu seçim algoritmanın doğru çalıştığını ölçmek için bir "kalibrasyon"dur: dik durumlarda overlap teorik olarak 0 olmalı; kod bunu doğruluyor mu kontrol ederiz. Üst satıra # koyarsanız iki taraf da |0⟩ kalır → aynı durumlar.

qc.barrier() Hesaplamaya etkisi yok; sadece görsel ve mantıksal bir ayraçtır. Devreyi qc.draw() ile çizdirdiğinizde "hazırlık", "swap testi" ve "ölçüm" aşamaları arasına dikey çizgi koyar. Optimizasyon (transpiler) sırasında kapıların barrier'ın iki tarafı arasında yer değiştirmesini de engeller — kontrollü deneylerde işe yarar.

qc.h(0) — ilk Hadamard Ancilla'yı (|0⟩ + |1⟩)/√2 süperpozisyonuna sokar. Bu, "kontrol kübitini her iki olasılıkta birden çalıştır" demektir; CSWAP'in iki farklı dünyayı (swap olmuş / olmamış) aynı anda üretmesini mümkün kılar. Algoritmanın klasik bir döngüden farkı tam olarak buradadır.

qc.cswap(0, 1, 2) — Fredkin Bu devrenin kalbi. Ancilla |0⟩ ise q1/q2 olduğu gibi kalır; |1⟩ ise yer değiştirirler. Ancilla süperpozisyonda olduğu için iki dünya birden gerçekleşir → tüm bu işlemden sonra ancilla'nın durumu, q1 ile q2'nin "ne kadar benzediğine" bağlı bir girişim (interference) deseni taşır.

qc.h(0) — ikinci Hadamard İlk Hadamard, ancillayı süperpozisyona soktu; ikincisi onu yine ölçülebilir bir tabana çevirir, ama bu sefer iki dünyanın girişiminin bilgisi taşınmış olur. Bunu fiziksel olarak Mach-Zehnder interferometresine benzetebilirsiniz: ışın ayırıcıdan geçirilip yine ayırıcıya geri gönderilir; sonuç, iki yolun ne kadar örtüştüğüne bağlıdır. Burada iki "yol" = q1/q2'nin değişip değişmemiş hâli.

qc.measure(0, 0) Sadece ancilla ölçülür. q1 ve q2'ye dokunulmaz; durumları korunur, dolayısıyla başka bir devrede tekrar kullanılabilirler. Ölçüm 0 verirse iki durum benzer; 1 verirse farklı yönde. Bir tek atış az bilgi taşır; istatistik için çok atış gerek.

shots=2048 Bell devresinde 1024 kullanmıştık; burada 2048 verdik çünkü overlap iki küçük olasılığın farkını okur. Daha fazla shot, hassasiyeti yaklaşık 1/N1/\sqrt{N} ile geliştirir: 2048, ~%2 hassasiyet sunar. Donanımda paranın/zamanın izin verdiği ölçüde shot artırmak, overlap tahminini yumuşatır.

p0 = counts.get('0', 0) / 2048 Klasik bir bölme: ancillanın 0 görünme oranı. counts.get('0', 0)'in iki avantajı var: anahtar yoksa (örn. tüm atışlar 1) 0 döner ve KeyError atılmaz; ayrıca okunması kolaydır.

overlap = 2 * p0 - 1 Tüm matematiği tek satıra indiren formül. p0 = (1 + |⟨ψ|φ⟩|²)/2 teorik ilişkisini geri çeviririz. Aynı durum (overlap = 1) için p0 = 1.0, dik durum (overlap = 0) için p0 = 0.5 beklenir. Sonlu shot ve gürültüde küçük negatife düşebilir; max(0, overlap) ile bunu fiziksel aralıkta kırparız.

Hızlı deney Koddaki qc.x(2) satırını başına # koyarak yorum satırına alın ve tekrar çalıştırın. İki kübit de 0\ket{0} olduğu için yardımcı kübit yalnızca 0 sonucunu vermeye başlar; overlap ise 1\approx 1 çıkar. Bu, algoritmanın iki durumun da aynı 0\ket{0} olduğunu başarıyla fark ettiğinin doğrudan kanıtıdır.
Deep Dive · Kuantum kernel

Swap testi, Kuantum Kernel Metotları'nın temel hesap birimidir. Klasik bir SVM / kernel modelinde benzerlik (kernel) fonksiyonu, iki örneğin iç çarpımı ile tanımlanır; kuantum kernel ise iki örneği farklı kuantum durumlarına kodlar (xψ(x)x \to \ket{\psi(x)}) ve aralarındaki örtüşmeyi ψ(x1)ψ(x2)2|\langle\psi(x_1)|\psi(x_2)\rangle|^2 olarak Swap testi ile ölçer.

Bu yaklaşım, klasik benzerlik fonksiyonlarıyla erişilemeyen yüksek boyutlu özellik uzaylarında — özellikle küçük veri rejimlerinde — alternatif sınıflandırma ve kümeleme stratejileri önerir.

Çalıştırma için qiskit ve qiskit-aer paketleri yeterlidir; kurulumun özeti ana sayfadaki IDE ve çalıştırma bölümündedir. Gerçek donanımda denemek için AerSimulator() satırını QiskitRuntimeService().backend("ibm_brisbane") gibi bir IBM cihazıyla değiştirin; Fredkin kapısı pahalı olduğu için NISQ donanımında beklenen overlap'tan ~%5–%10 sapma normaldir.

Devre ve doğrulama

Aşağıdaki şema üç kübitlik en yalın Swap testidir. Sol uçta, kodun qc.x(2) satırını yansıtan turuncu çerçeveli minik X kapısı q2'yi 1\ket{1} durumuna hazırlar — bu sayede karşılaştırılan iki durum dik (orthogonal) hâle gelir. Hemen ardından ancilla'ya HH, Fredkin (mor kontrol noktası + iki “×”), ikinci HH ve ölçüm gelir.

Swap testi · Fredkin merkezli İstemci tarafı SVG · 1 ancilla + 2 hedef · 1 ölçüm
a q1 q2 Hazırlık X q2 → |1⟩ H Hadamard Fredkin (CSWAP) H M Ölçüm
Doğrulama

Yardımcı kübit için: P(0)=12+12ψϕ2P(0) = \tfrac{1}{2} + \tfrac{1}{2}|\langle\psi|\phi\rangle|^2. Örnek kodda ψ=0\ket{\psi} = \ket{0}, ϕ=1\ket{\phi} = \ket{1} olduğundan overlap =0= 0 ve P(0)0,5P(0) \approx 0{,}5. Histogram 0 ve 1'i ~%50–%50 dağıtır.

  • 0 ≈ %50
  • 1 ≈ %50
  • Overlap = 2P(0) − 1 ≈ 0
  • Aynı durumda ne olur?

    Kodda qc.x(2) satırını silerseniz iki kübit de 0\ket{0} olur; histogram yalnızca 0 gösterir, overlap 1\approx 1.

  • Atış sayısı önemlidir

    Overlap istatistiksel bir tahmindir. Düşük atışta 2P(0) − 1 küçük negatif değerler verebilir; örnek kod max(0, overlap) ile bunu kırpar.

  • Çoklu kübit

    İki kayıt birden fazla kübitten oluşuyorsa Fredkin, kübit-kübit eşleşmeleri için paralel CSWAP'lar olarak genişletilir; matematiksel form P(0)P(0) aynıdır.

  • Donanımda maliyet · NISQ

    Fredkin doğal kapı kümesinde olmadığı için ayrıştırma sonrası birden çok iki kübitlik kapıya açılır; bu derinlik artışı, NISQ donanımlarda gürültü sınırını belirler. Bu yüzden gerçek cihazda mükemmel bir 0,50 dağılımı yerine 0,480,52 arası küçük sapmalar görmek normaldir; bu sapmalar cihazın hata oranı (error rate) hakkında dolaylı bir okumadır.