TensorFlow Quantum 設計

TensorFlow Quantum (TFQ) 是針對 NISQ 時代量子機器學習問題所設計。它將量子運算基本概念 (例如建構量子電路) 帶入 TensorFlow 生態系統。以 TensorFlow 建構的模型和運算會使用這些基本概念來建立強大的量子-古典混合系統。

研究人員可以使用 TFQ 建構 TensorFlow 圖表,其中包含量子資料集、量子模型和古典控制參數。這些都以張量形式呈現於單一運算圖表中。量子量測的結果 (導致古典機率事件) 是透過 TensorFlow 運算取得。訓練是使用標準 Keras API 完成。tfq.datasets 模組可讓研究人員試驗全新且有趣的量子資料集。

Cirq

Cirq 是 Google 推出的量子程式設計架構。它提供所有基本運算 (例如量子位元、閘、電路和量測),以便在量子電腦或模擬量子電腦上建立、修改及叫用量子電路。TensorFlow Quantum 使用這些 Cirq 基本概念來擴充 TensorFlow,以進行批次運算、模型建構和梯度運算。若要有效運用 TensorFlow Quantum,最好先有效運用 Cirq。

TensorFlow Quantum 基本概念

TensorFlow Quantum 實作將 TensorFlow 與量子運算硬體整合所需的元件。為此,TFQ 導入兩個資料類型基本概念

  • 量子電路:這表示 TensorFlow 內的 Cirq 定義量子電路 (cirq.Circuit)。建立不同大小的批次電路,類似於不同實數值資料點的批次。
  • Pauli 總和:表示 Cirq 中定義的 Pauli 運算子張量積的線性組合 (cirq.PauliSum)。與電路類似,建立不同大小的批次運算子。

基本運算

TensorFlow Quantum 在 tf.Tensor 內使用量子電路基本概念,實作處理這些電路並產生有意義輸出的運算。

TensorFlow 運算是以最佳化的 C++ 撰寫。這些運算會從電路取樣、計算期望值,並輸出指定電路產生的狀態。撰寫彈性且高效能的運算有一些挑戰

  1. 電路大小不一。對於模擬電路,您無法建立靜態運算 (例如 tf.matmultf.add),然後針對不同大小的電路替換不同數字。這些運算必須允許靜態大小的 TensorFlow 運算圖表不允許的動態大小。
  2. 量子資料可能會完全產生不同的電路結構。這是支援 TFQ 運算中動態大小的另一個原因。量子資料可能代表基礎量子狀態的結構性變更,此狀態是以原始電路的修改表示。由於新的資料點會在執行階段換入和換出,因此 TensorFlow 運算圖表在建構後無法修改,因此需要支援這些不同的結構。
  3. cirq.Circuits 類似於運算圖表,因為它們是一系列的運算,而且有些可能包含符號/預留位置。務必盡可能讓它與 TensorFlow 相容。

基於效能考量,Eigen (許多 TensorFlow 運算中使用的 C++ 程式庫) 不太適合量子電路模擬。反之,超越古典實驗的量子中使用的電路模擬器會做為驗證器,並擴充為 TFQ 運算的基礎 (全部以 AVX2 和 SSE 指令撰寫)。已建立具有相同功能簽章的運算,使用實體量子電腦。在模擬和實體量子電腦之間切換就像變更單行程式碼一樣容易。這些運算位於 circuit_execution_ops.py 中。

TensorFlow Quantum 層使用 tf.keras.layers.Layer 介面,向開發人員公開取樣、期望和狀態計算。建立古典控制參數或讀出運算的電路層非常方便。此外,您可以建立具有高度複雜性的層,支援批次電路、批次控制參數值,並執行批次讀出運算。如需範例,請參閱 tfq.layers.Sample

微分器

與許多 TensorFlow 運算不同,量子電路中的可觀測值沒有相對容易計算的梯度公式。這是因為古典電腦只能從量子電腦上執行的電路讀取樣本。

為了解決這個問題,tfq.differentiators 模組提供數種標準微分技術。使用者也可以定義自己的方法來計算梯度,無論是在以樣本為基礎的期望計算「真實世界」設定中,還是在解析精確世界中。在解析/精確環境中,有限差分等方法通常最快 (掛鐘時間)。雖然較慢 (掛鐘時間),但更實用的方法 (例如 參數平移隨機方法) 通常更有效。tfq.differentiators.Differentiator 會被例項化,並透過 generate_differentiable_op 附加到現有的運算,或傳遞至 tfq.layers.Expectationtfq.layers.SampledExpectation 的建構函式。若要實作自訂微分器,請從 tfq.differentiators.Differentiator 類別繼承。若要為取樣或狀態向量計算定義梯度運算,請使用 tf.custom_gradient

資料集

隨著量子運算領域的發展,將會出現更多量子資料和模型組合,讓結構化比較變得更加困難。tfq.datasets 模組會做為量子機器學習工作的資料來源。它可確保模型和效能的結構化比較。

希望透過大型社群貢獻,tfq.datasets 模組將會成長,以實現更透明且可重現的研究。量子控制、費米子模擬、近相變分類、量子感測等經過仔細整理的問題,都是新增至 tfq.datasets 的絕佳候選項目。若要提議新的資料集,請開啟 GitHub 議題