← 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
- Klasik tekrarlama kodu çoğunluk oyuyla tek bit hatalarını düzeltir: mantıksal hata 3p² − 2p³.
- Kuantumda kopya yerine dolanıklık kullanılır: a|0⟩ + b|1⟩ → a|000⟩ + b|111⟩.
- Sendrom, veriyi değil yalnızca eşlikleri ölçer ve hatanın yerini gösterir.
- Tekrarlama kodu faz hatalarını düzeltmez ve iki hataya karşı dayanıksızdır.
Kendini sına
Kuantum tekrarlama kodunda sendrom ölçümü neden süperpozisyonu bozmaz?
- Çünkü verinin kendisini değil, yalnızca kübitlerin eşitliğini (eşliği) ölçer
- Çünkü ölçüm çok hızlı yapılır
- Çünkü kodlanan durum kopyalanmıştır
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 →