TensorFlow Quantum (TFQ), NISQ dönemi kuantum makine öğreniminin sorunları için tasarlanmıştır. Kuantum devreleri oluşturmak gibi kuantum hesaplama ilkellerini TensorFlow ekosistemine getiriyor. TensorFlow ile oluşturulan modeller ve işlemler, güçlü kuantum-klasik hibrit sistemler oluşturmak için bu ilkelleri kullanır.
Araştırmacılar, TFQ kullanarak bir kuantum veri kümesi, bir kuantum modeli ve klasik kontrol parametreleri kullanarak bir TensorFlow grafiği oluşturabilirler. Bunların hepsi tek bir hesaplama grafiğinde tensörler olarak temsil edilir. Klasik olasılıklı olaylara yol açan kuantum ölçümlerinin sonucu, TensorFlow işlemleri tarafından elde edilir. Eğitim, standart Keras API ile yapılır.
tfq.datasets modülü, araştırmacıların yeni ve ilginç kuantum veri kümelerini denemelerine olanak tanır.
Cirq
Cirq , Google'ın sunduğu bir kuantum programlama çerçevesidir. Kuantum bilgisayarda veya simüle edilmiş bir kuantum bilgisayarda kuantum devreleri oluşturmak, değiştirmek ve çağırmak için kübitler, kapılar, devreler ve ölçüm gibi tüm temel işlemleri sağlar. TensorFlow Quantum, toplu hesaplama, model oluşturma ve gradyan hesaplama için TensorFlow'u genişletmek için bu Cirq temellerini kullanır. TensorFlow Quantum ile etkili olmak için Cirq ile etkili olmak iyi bir fikirdir.
TensorFlow Quantum temelleri
TensorFlow Quantum, TensorFlow'u kuantum hesaplama donanımıyla entegre etmek için gereken bileşenleri uygular. Bu amaçla, TFQ iki veri türü ilkesi sunar:
- Kuantum devresi: Bu temsil Cirq kuantum devreleri (-defined
cirq.CircuitTensorFlow içinde). Farklı gerçek değerli veri noktaları yığınlarına benzer şekilde, değişen boyutlarda devre grupları oluşturun.
- Pauli toplamı : Pauli operatörlerinin Cirq (
cirq.PauliSum) ile tanımlanan tensör ürünlerinin doğrusal kombinasyonlarını temsil eder. Devreler gibi, farklı boyutlarda operatör grupları oluşturun.
Temel operasyonlar
TensorFlow işlemleri optimize edilmiş C ++ ile yazılmıştır. Bu işlemler devrelerden örnek alır, beklenti değerlerini hesaplar ve verilen devreler tarafından üretilen durumu çıkarır. Esnek ve performanslı operasyonlar yazmanın bazı zorlukları vardır:
- Devreler aynı boyutta değil. Simüle edilmiş devreler için, statik işlemler (
tf.matmulveya
tf.addgibi) oluşturamaz ve ardından farklı boyutlardaki devreler için farklı sayıları değiştiremezsiniz. Bu işlemler, statik olarak boyutlandırılmış TensorFlow hesaplama grafiğinin izin vermediği dinamik boyutlara izin vermelidir.
- Kuantum verileri, tamamen farklı bir devre yapısını indükleyebilir. Bu, TFQ işlemlerinde dinamik boyutları desteklemenin başka bir nedenidir. Kuantum verileri, orijinal devrede yapılan değişikliklerle temsil edilen temel kuantum durumuna yapısal bir değişikliği temsil edebilir. Çalışma zamanında yeni veri noktaları değiştirilip değiştirildikçe, TensorFlow hesaplama grafiği oluşturulduktan sonra değiştirilemez, bu nedenle bu çeşitli yapılar için destek gereklidir.
-
cirq.Circuits, bir dizi işlem olmaları ve bazıları semboller / yer tutucular içermeleri bakımından hesaplama grafiklerine benzer. Bunu mümkün olduğunca TensorFlow ile uyumlu hale getirmek önemlidir.
Performans nedenleriyle, Eigen (birçok TensorFlow işleminde kullanılan C ++ kitaplığı) kuantum devre simülasyonu için pek uygun değildir. Bunun yerine, kuantum üstünlüğü deneyinde kullanılan devre simülatörleri doğrulayıcı olarak kullanılır ve TFQ işlemlerinin temeli olarak genişletilir (tümü AVX2 ve SSE talimatları ile yazılmıştır). Fiziksel bir kuantum bilgisayar kullanan aynı işlevsel imzalara sahip operasyonlar oluşturuldu. Simüle edilmiş ve fiziksel bir kuantum bilgisayar arasında geçiş yapmak, tek bir kod satırını değiştirmek kadar kolaydır. Bu işlemler,
circuit_execution_ops.py .
Katmanlar
TensorFlow Quantum katmanları,
tf.keras.layers.Layer arayüzünü kullanarak örnekleme, beklenti ve durum hesaplamasını geliştiricilere
tf.keras.layers.Layer . Klasik kontrol parametreleri veya okuma işlemleri için bir devre katmanı oluşturmak uygundur. Ek olarak, parti devresini, toplu kontrol parametre değerini destekleyen yüksek derecede karmaşıklığa sahip bir katman oluşturabilir ve toplu okuma işlemlerini gerçekleştirebilirsiniz.
tfq.layers.Sample için
tfq.layers.Sample bakın.
Farklılaştırıcılar
Pek çok TensorFlow işleminden farklı olarak, kuantum devrelerindeki gözlenebilirler, hesaplanması nispeten kolay olan gradyanlar için formüllere sahip değildir. Bunun nedeni, klasik bir bilgisayarın yalnızca kuantum bilgisayarda çalıştırılan devrelerden örnekleri okuyabilmesidir.
Bu sorunu çözmek için
tfq.differentiators modülü birkaç standart farklılaştırma tekniği sağlar. Kullanıcılar, gradyanları hesaplamak için kendi yöntemlerini de tanımlayabilirler - hem örnek tabanlı beklenti hesaplamasının "gerçek dünya" ayarında hem de analitik tam dünyada. Sonlu fark gibi yöntemler genellikle analitik / kesin bir ortamda en hızlıdır (duvar saati süresi). Daha yavaş (duvar saati süresi) olsa da, parametre kaydırma veya stokastik yöntemler gibi daha pratik yöntemler genellikle daha etkilidir. Bir
tfq.differentiators.Differentiator örneği ve var olan bir op bağlı
generate_differentiable_op veya yapıcısına iletilmiş
tfq.layers.Expectation veya
tfq.layers.SampledExpectation . Özel bir farklılaştırıcı uygulamak için
tfq.differentiators.Differentiator sınıfından devralın. Örnekleme veya durum vektörü hesaplaması için bir gradyan işlemi tanımlamak için
tf.custom_gradient kullanın.
Veri kümeleri
Kuantum hesaplama alanı büyüdükçe, daha fazla kuantum verisi ve model kombinasyonu ortaya çıkacak ve bu da yapılandırılmış karşılaştırmayı daha zor hale getirecektir.
tfq.datasets modülü, kuantum makine öğrenimi görevleri için veri kaynağı olarak kullanılır. Model ve performans için yapılandırılmış karşılaştırmalar sağlar.
Büyük topluluk katkılarıyla
tfq.datasets modülünün daha şeffaf ve tekrarlanabilir araştırmalara olanak verecek şekilde büyüyeceği
tfq.datasets . Kuantum kontrolü, fermiyonik simülasyon, faz geçişlerine yakın sınıflandırma, kuantum algılama vb.
tfq.datasets dikkatle küratörlüğünü yapılan problemlerin tümü
tfq.datasets eklenmesi için harika adaylardır. Yeni bir veri kümesi önermek için bir GitHub sorunu açın.