← Quantum Store · Rehberler · Dersler · Sözlük · Paketler · Öğrenme yolları · English

Gürültü ve kuantum hata düzeltme kursu · Ders 2 / 5 · 12 dk

Tekrarlama kodu: hatayı veriye bakmadan bulmak

En basit hata düzeltme kodu bir biti üç kez tekrarlamaktır. Kuantumda veriyi ölçmeden, yalnızca eşlikleri (sendromu) ölçerek hatanın yerini bulmayı öğren.

Klasik tekrarlama

Gürültülü bir kanaldan bir bit göndermek için onu üç kez gönderebilirsin: 0 yerine 000, 1 yerine 111. Alıcı çoğunluğa bakar; tek bir bit bozulsa bile doğru değeri bulur. Her bit p olasılıkla bozuluyorsa, mantıksal hata için en az iki bitin bozulması gerekir ve olasılık 3p² − 2p³ olur.

p = %1 için bu yaklaşık %0,03’tür: hata 30 kat azalır. Ama kod yalnızca p küçükken işe yarar; p = %50 olsaydı tekrarlama hiçbir şey kazandırmazdı.

for p in [0.1, 0.01, 0.001]:
    print(p, f'{3 * p**2 - 2 * p**3:.6f}')
# 0.1 0.028000
# 0.01 0.000298
# 0.001 0.000003

Kuantumda iki engel

Kübitleri kopyalayamayız ve ölçersek süperpozisyonu bozarız. Çözüm: kopya yerine dolanıklık kullanmak ve veriyi değil, yalnızca bitlerin birbirine eşit olup olmadığını ölçmek. a|0⟩ + b|1⟩ durumu iki CNOT ile a|000⟩ + b|111⟩ olarak kodlanır; bu bir kopya değil, üç kübite yayılmış tek bir durumdur.

Sonra iki yardımcı (kontrol) kübitine q0 ⊕ q1 ve q1 ⊕ q2 eşlikleri yazılır. Bu iki bite sendrom denir. Sendrom a ve b hakkında hiçbir şey söylemez, yalnızca hatanın yerini gösterir: 00 hata yok, 01 q0, 11 q1, 10 q2 bozuk demektir. Bozuk kübite bir X daha uygulanarak hata düzeltilir.

from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector

# q0, q1, q2 veri kübitleri; q3 ve q4 sendrom kübitleri
for wrong in [None, 0, 1, 2]:
    qc = QuantumCircuit(5)
    qc.cx(0, 1)
    qc.cx(0, 2)                  # kodlama: |0⟩ → |000⟩
    if wrong is not None:
        qc.x(wrong)              # tek bir bit hatası
    qc.cx(0, 3)
    qc.cx(1, 3)                  # q3 = q0 ⊕ q1
    qc.cx(1, 4)
    qc.cx(2, 4)                  # q4 = q1 ⊕ q2
    probs = Statevector(qc).probabilities_dict()
    print(wrong, max(probs, key=probs.get)[:2])   # sendrom: q4 q3
# None 00
# 0 01
# 1 11
# 2 10

Sınırları

Üç kübitlik tekrarlama kodu yalnızca bit hatalarını düzeltir; faz hatalarına karşı korumasızdır. Ayrıca iki bit aynı anda bozulursa sendrom yanlış kübiti gösterir ve “düzeltme” hatayı büyütür. Bir sonraki derste faz hatalarını yakalayan kodu ve ikisini birleştiren Shor kodunu göreceğiz.

Kendin dene

Sendrom 11, hatanın q1’de olduğunu söylüyor. q1’deki X’i kaldır: sonuç 00000 olur, yani hata yok. Sonra q2’ye bir X ekle: sendrom 10 olur. Veri kübitlerinin değerini hiç ölçmeden hatanın yerini bulduk.

Tarayıcıda dene (kurulum yok)

Akılda kalsın

Kendini sına

Kuantum tekrarlama kodunda sendrom ölçümü neden süperpozisyonu bozmaz?

Cevabı göster

Çünkü verinin kendisini değil, yalnızca kübitlerin eşitliğini (eşliği) ölçer. q0 ⊕ q1 ve q1 ⊕ q2 eşlikleri a|000⟩ + b|111⟩ için a ve b’den bağımsızdır; bu yüzden ölçüm a ve b hakkında hiçbir şey öğrenmez.

← Gürültü ve hata türleri: kübitler neden bozulur? · Faz hatası kodu ve Shor’un dokuz kübitlik kodu →

Paylaş: X · LinkedIn