PennyLane : 使用方法 : テンプレート

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 パラメータ配列のリストを作成します。

 

以上