← Quantum Store · Rehberler · Dersler · Sözlük · Paketler · Öğrenme yolları · English
Kuantum makine öğrenmesi ve donanım kursu · Ders 2 / 5 · 12 dk
Varyasyonel sınıflandırıcı: devreyi bir sinir ağı gibi eğitmek
Parametreli bir kuantum devresi, açıları ayarlanarak veriyi sınıflandırmayı öğrenebilir. Parametre kaydırma kuralıyla gradyan hesapla ve tek kübitlik bir sınıflandırıcıyı eğit.
Kuantum sinir ağı fikri
Varyasyonel bir sınıflandırıcı üç parçadan oluşur: veriyi yükleyen bir kodlama devresi, açıları eğitilecek parametreli bir devre ve bir ölçüm. Ölçülen beklenen değer, örneğin ⟨Z⟩, modelin çıktısıdır: pozitifse bir sınıf, negatifse diğer sınıf.
Eğitim, VQE’deki döngünün aynısıdır: kuantum bilgisayar çıktıyı hesaplar, klasik bir optimizasyon açıları hatayı küçültecek yönde değiştirir. Bu yüzden bu modellere bazen kuantum sinir ağı denir.
Parametre kaydırma kuralı
Açıları ayarlamak için çıktının açıya göre türevi gerekir. Kuantum bilgisayarda türev doğrudan ölçülemez, ama rx, ry, rz gibi dönme kapıları için güzel bir kural var: türev, açıyı π/2 artırıp ve azaltıp ölçülen iki değerin farkının yarısıdır. Buna parametre kaydırma kuralı denir.
Aşağıda ry(θ) için ⟨Z⟩ = cos θ’dır. Kural, cos θ’nın türevi olan −sin θ’yı tam olarak verir. Ardından aynı kural, altı veri noktasını iki sınıfa ayıran tek kübitlik bir modeli eğitmek için kullanılır.
import numpy as np
from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorEstimator
from qiskit.quantum_info import SparsePauliOp
estimator = StatevectorEstimator()
Z = SparsePauliOp('Z')
def model(x, theta):
qc = QuantumCircuit(1)
qc.ry(x, 0) # veriyi açı olarak yükle
qc.ry(theta, 0) # eğitilen parametre
return float(estimator.run([(qc, Z)]).result()[0].data.evs)
def shift_grad(x, theta): # parametre kaydırma kuralı
return (model(x, theta + np.pi / 2) - model(x, theta - np.pi / 2)) / 2
print(round(shift_grad(0, 0.8), 4), round(-np.sin(0.8), 4)) # -0.7174 -0.7174
X = np.array([0.2, 0.5, 0.9, 2.3, 2.7, 3.0])
y = np.array([1, 1, 1, -1, -1, -1])
theta = 2.0
accuracy = lambda t: round(float(np.mean([np.sign(model(x, t)) == label for x, label in zip(X, y)])), 2)
print('önce', accuracy(theta))
for _ in range(30):
grad = np.mean([2 * (model(x, theta) - label) * shift_grad(x, theta) for x, label in zip(X, y)])
theta -= 0.3 * grad
print('sonra', accuracy(theta))
# önce 0.33
# sonra 1.0
Zorluklar
Büyük, rastgele seçilmiş parametreli devrelerde gradyanlar kübit sayısıyla üstel olarak küçülür; McClean ve arkadaşları 2018’de bu “çorak plato” sorununu gösterdi. Gradyan sıfıra çok yakınsa eğitim ilerleyemez.
Ayrıca her gradyan için devre birçok kez çalıştırılmalıdır. Bugüne kadar varyasyonel sınıflandırıcıların gerçek veri üzerinde iyi klasik modelleri geçtiği gösterilmedi; araştırmacılar avantajın hangi tür verilerde mümkün olduğunu arıyor.
Kendin dene
Tek bir H, ry(π/2) ile aynı sonucu verir: ⟨Z⟩ = 0, yani model iki sınıf arasında tam kararsız. Sınıflandırıcı eğitilirken açılar, her veri noktası için ⟨Z⟩’yi +1’e ya da −1’e itecek şekilde ayarlanır. H’yi kaldır: ⟨Z⟩ = +1, kesin bir “birinci sınıf” kararı.
Tarayıcıda dene (kurulum yok)Akılda kalsın
- Varyasyonel sınıflandırıcı: veri kodlama + parametreli devre + ölçüm; çıktı ⟨Z⟩’nin işaretidir.
- Parametre kaydırma kuralı türevi, açıyı ±π/2 kaydırıp ölçerek tam olarak verir.
- Eğitim döngüsü VQE’deki gibi kuantum ve klasik bilgisayarı birleştirir.
- Çorak platolar ve ölçüm maliyeti büyük modellerin eğitimini zorlaştırır.
Kendini sına
Parametre kaydırma kuralı neyi hesaplamak için kullanılır?
- Kübit sayısını
- Devrenin derinliğini
- Çıktının bir açıya göre türevini (gradyanı)
Cevabı göster
Çıktının bir açıya göre türevini (gradyanı). Açıyı π/2 artırıp azaltarak ölçülen iki değerin farkının yarısı, dönme kapıları için türevi tam olarak verir.
← Veriyi kübitlere yüklemek: taban, açı ve genlik kodlama · Kuantum çekirdekleri: verileri kuantum durumlarıyla karşılaştırmak →