Path: blob/main/translations/ja/quantum-machine-learning/encoding.ipynb
3855 views
データの符号化
このページでは、量子機械学習のためのデータ符号化の問題を紹介し、さまざまなデータ符号化手法について説明し、実装します。
はじめに
機械学習モデルを成功させるには、データの表現が非常に重要です。古典的な機械学習の場合では、データをいかに数値的に表現し、古典的な機械学習アルゴリズムで最適に処理できるようにするかが問題となります。
量子機械学習の場合、問題は似ていますが、より基本的です:問題は、データをどうやって表現して、量子システムに効率的に入力し、量子機械学習アルゴリズムで処理できるようにするかです。これは通常、データの符号化(データ エンコーディング )と呼ばれますが、データの 埋め込み または ロード とも呼ばれます。
このプロセスは、量子機械学習アルゴリズムの重要な部分であり、その計算能力に直接影響します。
計算基底符号化
計算基底符号化は、古典的なビット文字列を量子ビットシステムの 計算基底状態 に関連付けます。 たとえば、の場合、これはとしてビット文字列として表すことができ、量子状態として4量子ビットシステムによって表すことができます。より一般的には、ビット文字列:の場合、対応する-量子ビット状態はParseError: KaTeX parse error: Undefined control sequence: \cssId at position 1: \̲c̲s̲s̲I̲d̲{ket-x}{| x \ra…です。ここで、に対してParseError: KaTeX parse error: Undefined control sequence: \class at position 5: b_n \̲c̲l̲a̲s̲s̲{in}{\in} {0,1} です。
上記の古典的なデータセット の場合、計算基底符号化を使用するには、各データ ポイントを ビットの文字列とし 、これを量子状態 にマッピングします。ここで において、 であり、また、 です。データセット全体を計算基底状態の重ね合わせとして表すことができます。
ParseError: KaTeX parse error: Undefined control sequence: \cssId at position 1: \̲c̲s̲s̲I̲d̲{_ket-dataset}{…計算基底符号化
Qiskitでは、どのような状態でデータセットを符号化するかを計算したら、initialize 関数を使用して準備することができます。 たとえば、データセット は、 の状態としてエンコードされます:
この例は、計算基底符号化の欠点も示しています。つまり、計算基底符号化は理解するのは簡単ですが、状態ベクトルは非常に疎になる可能性があり、実装するスキームが通常効率的ではありません。
振幅符号化
振幅符号化は、データを量子状態の振幅に符号化します。これは、正規化された古典的な 次元データポイント を、 量子ビットの量子状態 の振幅として表します:
ここで、、 は の 番目の要素であり、 は 番目の計算基底状態です。
上記の古典的なデータセット を符号化するために、すべての 次元のデータ ポイントを、長さ の 1 つの振幅ベクトルに連結します:
ParseError: KaTeX parse error: Undefined control sequence: \cssId at position 8: \alpha=\̲c̲s̲s̲I̲d̲{*a-norm}{A*{\t…ここで、 は正規化定数であり、 です。 データセット は、計算基底で次のように表すことができます。
ここで、 は振幅ベクトルの要素であり、 は計算基底状態です。 符号化される振幅の数は です。 量子ビットのシステムは 個の振幅を提供するので、振幅の埋め込みには 個の量子ビットが必要です。
振幅符号化
例として、振幅符号化を使用してデータセット を符号化してみましょう。両方のデータポイントを連結し、結果のベクトルを正規化すると、次のようになります:
結果として得られる2量子ビットの量子状態は次のようになります:
上記の例では、振幅ベクトルの要素の総数は2の累乗です。が2の累乗でない場合、 となるようにの値を選び、振幅ベクトルに無意味な定数を埋め込めばよいです。
計算基底符号化と同様に、データセットを符号化する状態を計算したら、Qiskitでinitialize関数を使用してを準備できます:
振幅符号化の利点は、符号化に必要なのは量子ビットのみであるということです。 ただし、その後のアルゴリズムは量子状態の振幅を操作する必要があり、量子状態を準備し測定する方法は効率的ではない傾向があります。
角度符号化
角度符号化は、 個の機能量を 量子ビットの回転角に符号化します。ここで、 です。たとえば、データ ポイント は次のように符号化できます。
ParseError: KaTeX parse error: Undefined control sequence: \cssId at position 1: \̲c̲s̲s̲I̲d̲{_}{|x\rangle} …これは、前の2つの符号化方法とは異なり、データセット全体ではなく、一度に1つのデータポイントのみを符号化する方法です。ただし、使用するのは 量子ビットで量子回路の深さも一定であるため、現在の量子ハードウェアに適用可能です。
角度符号化はユニタリー演算で指定することができます:
ParseError: KaTeX parse error: Undefined control sequence: \class at position 11: S_{x_j} = \̲c̲l̲a̲s̲s̲{*big-o-times-n…ここで
軸周りの単一量子ビットの回転は次のとおりでした:
に注意し、例として、qiskitを使用してデータポイント を符号化します:
高密度角度符号化は、角度符号化を少し一般化したものであり、相対位相を使用して1量子ビットごとに2つの特徴を符号化します。データポイント は次のように符号化されます:
ParseError: KaTeX parse error: Undefined control sequence: \class at position 13: |x\rangle = \̲c̲l̲a̲s̲s̲{*big-o-times-n…角度および高密度角度符号化は、正弦波関数および指数関数を使用しますが、この関数は特別である必要はなく、任意の関数を使う一般的な量子ビットの符号化クラスに簡単に抽象化できます。次のように、任意のユニタリー演算で定義されたパラメタライズド量子回路で符号化を実装することもできます。
任意の符号化
任意の符号化は、 個の特徴を 量子ビット上の 個のパラメーター化されたゲートの回転として符号化します。ここで、 です。角度符号化と同様に、データセット全体ではなく、一度に1つのデータポイントのみを符号化します。 また、一定の深さの量子回路と 量子ビットを使用しているため、現在の量子ハードウェアで実行できます。
たとえば、EfficientSU2回路を使用して12個の特徴を符号化するには、3個の量子ビットを使用するだけです:
例えば、データポイント を12の特徴量で符号化し、パラメーター化された各ゲートを使用して異なる特徴量を符号化します。
3量子ビットのQiskitZZFeatureMap回路は、6つのパラメーター化ゲートがあるにもかかわらず、3つの機能のデータポイントしか符号化しません:
クイッククイズ
パラメーター化された量子回路には16個のパラメーターがあります。 エンコードできる機能の最大数はいくつですか?
4
8
16
32
さまざまなタイプのデータに対するさまざまなパラメータ化された量子回路の性能は、活発に研究されている分野です。
参考文献
Maria Schuld and Francesco Petruccione, Supervised Learning with Quantum Computers, Springer 2018, doi:10.1007/978-3-319-96424-9.
Ryan LaRose and Brian Coyle, Robust data encodings for quantum classifiers, Physical Review A 102, 032420 (2020), doi:10.1103/PhysRevA.102.032420, arXiv:2003.01695.