量子機器學習 (二) - 資料編碼

作者:
劉宸銉
閱讀時間:
5
分鐘
# 量子機器學習 (二) - 資料編碼 上一次,我們提到了目前主流的 hybrid quantum-classical machine learning 有幾個元素,其中之一是需要把 input data(輸入資料)編碼成量子態,這樣才能以參數化量子閘構成的 QNN 做運算,換言而之,資料 $x$ 需要變成量子態 $|x \rangle$,才可以被 QNN 中的 $U(\theta)$ 作用: \begin{split} |\psi (\theta) \rangle = U(\theta) |x \rangle \end{split} 以至於一個被 QNN 作用後的量子態 $|\psi (\theta) \rangle$ 包含著 $x$ 的資訊,我們就可以設計相關的 QML 架構。這種方法稱作編碼(encoding),本次文章的內容就是要來介紹 $x \rightarrow |x\rangle$ 的幾種做法,以及他們的適用情況。 ## Basis Encoding Basis encoding 是一種比較直觀的編碼方法,也就是直接把 bits 對應成 qubits,例如一個數字 $1010$ 可以被量子態 $|1010 \rangle$ 表示: \begin{split} 1010 \rightarrow |1010\rangle = |1\rangle \otimes |0\rangle \otimes |1\rangle \otimes |0 \rangle \end{split} 所以長度為 $m$ 的[二進位](https://www.entangletech.tw/lesson/basic-algorithm-02)數字可以被 $m$ 個 qubits 表示。這種編碼方法比較適合整數或是[二進位](https://www.entangletech.tw/lesson/basic-algorithm-02)數字的資料類型。 以 $(-0.7, 0.1, 1.0)$ 這筆資料為例,其二進位制是 $11011\space 01001\space 01111$,經過 basis encoding 後為 $|11011\space 01001\space 01111\rangle$。 ## Angle Encoding 在 angle encoding 中,資料 $x$ 中的資訊被編碼在[旋轉閘](https://www.entangletech.tw/lesson/basic-algorithm-10)的角度中。旋轉閘,例如$R_X(\theta), R_Y(\theta), R_Z(\theta)$,假設資料 $x$ 是一個向量,重寫為 $\vec{x} = (x_1, x_2, x_3)$,我們可以選擇用其中一種旋轉閘把他編碼到一個 qubit 的量子態中: \begin{split} | x \rangle = R_X(x_1)R_X(x_2)R_X(x_3)| 0\rangle \end{split} 當然其他的旋轉閘也可以做一樣的事: \begin{split} | x \rangle = R_Y(x_1)R_Y(x_2)R_Y(x_3)| 0\rangle \end{split} 或 \begin{split} | x \rangle = R_Z(x_1)R_Z(x_2)R_Z(x_3)| 0\rangle \end{split} 也可以用不只一個 qubits 來做: \begin{split} | x \rangle = (R_X (x_1) | 0 \rangle) \otimes (R_X (x_2) |0 \rangle) \otimes (R_X (x_3) | 0 \rangle) \end{split} 這些例子準備出來的量子態 $|x\rangle$ 就會含有 $x$ 的資訊,以便做後續的計算。這種編碼方法被大量用在主流的 QML 研究中,其中一個原因是因為這一塊角度編碼的量子電路可以被視為一種輸入資料的區塊,除了便於理解外,所需的 qubits 數目可以被控制,不過 qubits 數目跟電路深度之間會需要做取捨:深度 $a$ 的量子電路與 $b$ 個量子位元可以編碼長度 $a \times b$ 的資訊。 ## Amplitude Encoding 在 amplitude encoding 中,資料 $x$ 的資訊被編碼在量子態的 amplitude(機率幅)中。假設一個量子態 \begin{split} | \psi \rangle = \alpha |0 \rangle + \beta |1\rangle \end{split} 這裡的目標就是把資訊編碼到 $\alpha$ 與 $\beta$ 之中。在 $N$ 個 qubits 的量子態中有 $2^N$ 個 amplitude,換句話說,如果有一組資訊長度為 $m$,可以使用 $\lceil \log_2 m \rceil$ 個 qubits 的amplitude encoding 編碼資訊。以上面舉過的例子而言,$\vec{x} = (x_1, x_2, x_3, x_4)$,就可以使用兩個 qubits 的 amplitude encoding: \begin{split} |x \rangle = \frac{x_1}{\sqrt{x_1^2+x_2^2+x_3^2+x_4^2}} |00\rangle + \frac{x_2}{\sqrt{x_1^2+x_2^2+x_3^2+x_4^2}} |01\rangle + \frac{x_3}{\sqrt{x_1^2+x_2^2+x_3^2+x_4^2}} |10\rangle + \frac{x_4}{\sqrt{x_1^2+x_2^2+x_3^2+x_4^2}} |11\rangle \end{split} 因為 $|x \rangle$ 要滿足 normalization condition (歸一條件),即: \begin{split} |\langle 00 | x \rangle|^2 + | \langle 01 | x \rangle|^2 + |\langle 10 | x \rangle|^2 + |\langle 11 | x \rangle|^2 = 1 \end{split} 所以在每個 amplitude 底下會有一個 $\frac{1}{\sqrt{x_1^2 + x_2^2 + x_3^2+x_4^2}}$ 的 factor。 比方說有一筆資料是 $(1.5, 0.0, -5.0, 0.0)$,要將其用 amplitude encoding,要先計算 normalize factor: \begin{align} x_{norm}=\frac{1}{\sqrt{(1.5)^2+0.0^2+(-5.0)^2+0.0^2}}=\frac{1}{\sqrt{27.25}} \end{align} 所以經過 amplitude encoding 後變成 \begin{align} |x\rangle&=\frac{1}{\sqrt{27.25}}(1.5|00\rangle+0.0|01\rangle-5.0|10\rangle+0.0|11\rangle) \\ &=\frac{1}{\sqrt{27.25}}(1.5|00\rangle-5.0|10\rangle) \end{align} 雖然這種方法看起來只需要使用少量的 qubits,但實際上需要準備出任意量子態的電路深度往往是 [$O(2^N)$](https://arxiv.org/abs/quant-ph/0407010)。
課程目錄