PennyLane 使用方法 : テンプレート (翻訳)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 10/21/2019
* 本ページは、PennyLane : Using PennyLane の次のページを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
$$
\def\bra#1{\mathinner{\left\langle{#1}\right|}}
\def\ket#1{\mathinner{\left|{#1}\right\rangle}}
\def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}}
$$
使用方法 : テンプレート
PennyLane は一般的な変分回路アーキテクチャの pre-coded テンプレートの増大するライブラリを提供します、これはより複雑なモデルを容易に構築、評価、そして訓練するために使用できます。文献では、そのようなアーキテクチャは一般にansatz として知られています。
Note
テンプレートは PennyLane により提供される量子演算の構造化された組み合わせから構築されています。これはテンプレートは正当な QNode 内だけで使用できることを意味します。
PennyLane は 2 つのタイプのテンプレートを概念的に識別します、層アーキテクチャと入力埋め込みです。殆どのテンプレートはランダム初期パラメータの配列を提供する関数により補完されます。
テンプレートをそのように使用するかのサンプルは次のようなものです :
import pennylane as qml from pennylane.templates.embeddings import AngleEmbedding from pennylane.templates.layers import StronglyEntanglingLayers from pennylane.init import strong_ent_layer_uniform dev = qml.device('default.qubit', wires=2) @qml.qnode(dev) def circuit(weights, x=None): AngleEmbedding(x, [0,1]) StronglyEntanglingLayers(weights=weights, wires=[0,1]) return qml.expval(qml.PauliZ(0)) init_weights = strong_ent_layer_uniform(n_wires=2) print(circuit(init_weights, x=[1., 2.]))
ここで、層テンプレート StronglyEntanglingLayers() と一緒に埋め込みテンプレート AngleEmbedding() を、そして一様パラメータ初期化ストラテジー strong_ent_layer_uniform() を使用しました。
層テンプレート
pennylane.templates.layers モジュールで見つかる、層アーキテクチャはニューラルネットワークの層のように反復されるゲートのシークエンスを定義します。それらは通常は訓練可能パラメータだけを含みます。
次の層テンプレートが利用可能です :
CVNeuralNetLayer | ニューラルネットワークを模倣している interferometers, displacement と squeezing ゲートの層、そして Kerr ゲート非線形性。 |
CVNeuralNetLayers | arXiv:1806.06871 で指定される、タイプ CVNeuralNetLayer() の層のシークエンス。 |
Interferometer | 一般線形 interferometer、beamsplitters と位相 shifters の配列。 |
RandomLayer | ランダムに選択されたシングル量子ビット回転と ランダムに選択された量子ビット上で作用する、2-量子ビット entangling ゲート。 |
RandomLayers | タイプ RandomLayer() の層のシークエンス |
StronglyEntanglingLayer | 各量子ビット上回転を適用して 2-量子ビット entangling ゲートのカスケードが続く層。 |
StronglyEntanglingLayers | arXiv:1804.00633 で指定される、タイプ StronglyEntanglingLayer() の層のシークエンス。 |
埋め込みテンプレート
templates.embeddings モジュールで見つかる、埋め込みは入力特徴を回路の量子状態にエンコードします。従ってそれらは引数として特徴ベクトルを取ります。これらの埋め込みはまた訓練可能パラメータに依拠する可能性もあります、その場合埋め込みは学習可能です。
次の埋め込みテンプレートが利用可能です :
AmplitudeEmbedding | $2^n$ 特徴を $n$ 量子ビットの振幅ベクトルにエンコードします。 |
BasisEmbedding | $n$ バイナリ特徴を $n$ 量子ビットの基底状態にエンコードします。 |
AngleEmbedding | $N$ 特徴を $n$ 量子ビットの回転角にエンコードします、ここで $N \leq n$。 |
SqueezingEmbedding | $N$ 特徴を $M$ モードの squeezing 振幅 $r \geq 0$ あるいは位相 $\phi \in [0, 2\pi)$ にエンコードします、ここで $N\leq M$。 |
DisplacementEmbedding | $N$ 特徴を $M$ モードの displacement 振幅 $r$ あるいは位相 $\phi$ にエンコードします。 |
パラメータ初期化
各訓練可能なテンプレートは init モジュールで専用関数を持ちます、これは訓練可能なパラメータのためのランダムに初期化された配列のリストを生成します。
Strongly entangling 回路
strong_ent_layers_uniform | 一様分布からドローされた、StronglyEntanglingLayers() のための単一パラメータ配列のリストを作成します。 |
strong_ent_layers_normal | 正規分布からドローされた、StronglyEntanglingLayers() のための単一パラメータ配列のリストを作成します。 |
strong_ent_layer_uniform | 一様分布からドローされた、StronglyEntanglingLayer() のための単一パラメータ配列のリストを作成します。 |
strong_ent_layer_normal | 正規分布からドローされた、StronglyEntanglingLayer() のための単一パラメータ配列のリストを作成します。 |
ランダム回路
random_layers_uniform | 一様分布からドローされた、RandomLayers() のための単一パラメータ配列のリストを作成します。 |
random_layers_normal | 正規分布からドローされた、RandomLayers() のための単一パラメータ配列のリストを作成します。 |
random_layer_uniform | 一様分布からドローされた、RandomLayer() のための単一パラメータ配列のリストを作成します。 |
random_layer_normal | 正規分布からドローされた、RandomLayer() のための単一パラメータ配列のリストを作成します。 |
連続変数量子ニューラルネットワーク
cvqnn_layers_uniform | CVNeuralNetLayers() のための 11 パラメータ配列のリストを作成します、そこでは非アクティブゲート・パラメータが一様分布から、アクティブパラメータが正規分布からドローされます。 |
cvqnn_layers_normal | CVNeuralNetLayers() の 11 パラメータ配列のリストを作成します、そこではアクティブと非アクティブゲート・パラメータの両者は正規分布からドローされます。 |
cvqnn_layer_uniform | CVNeuralNetLayer() のための 11 パラメータ配列のリストを作成します、そこでは非アクティブゲート・パラメータが一様分布から、アクティブパラメータが正規分布からドローされます。 |
cvqnn_layer_normal | CVNeuralNetLayer() の 11 パラメータ配列のリストを作成します、そこではアクティブと非アクティブゲート・パラメータの両者は正規分布からドローされます。 |
Interferometer
interferometer_uniform | 一様分布からドローされた、Interferometer() のための 3 パラメータ配列のリストを作成します。 |
interferometer_normal | 正規分布からドローされた、Interferometer() のための 3 パラメータ配列のリストを作成します。 |
以上