Path: blob/master/site/ja/quantum/tutorials/barren_plateaus.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
不毛の高原
この例では、量子ニューラルネットワーク構造だけでは学習に不十分だという McClean、2019 の研究結果について見ていきます。特に、特定の大規模なランダム量子回路のファミリでは勾配が消えてしまうため量子ニューラルネットワークが優れた機能を発揮しないことがわかります。この例では、特定の学習問題のモデルをトレーニングするのではなく、勾配の動作を理解することに焦点を当てます。
セットアップ
TensorFlow Quantum をインストールします。
次に、TensorFlow とモジュールの依存関係をインポートします。
1. 概要
以下は多くのブロックを持つランダム量子回路です ( はランダムなパウリ回転です):
が任意の量子ビット と の期待値 w.r.t として定義されている場合、 の平均が 0 に非常に近くなり、あまり変化しないという問題があります。 以下に示すとおりです。
2. ランダム回路の生成
論文からの構成は簡単に生成できです。以下は、ランダムな量子回路を生成する簡単な関数を実装します。これは量子ニューラルネットワーク(QNN)と呼ばれ、量子ビットのセットの深さを指定します。
ここでは、1 つのパラメータ の勾配を調査します。 が存在する回路にsympy.Symbol
を配置します。回路内の他のシンボルの統計は分析しないので、ここでランダムな値に置き換えます。
3. 回路の実行
勾配の変化が少ないという主張を調査するために、オブザーバブル、および、いくつかの回路を生成します。まず、ランダム回路のバッチを生成します。ランダムな ZZ オブザーバブルを選択し、TensorFlowQuantum を使用して勾配と分散をバッチ計算します。
3.1 バッチ分散計算
回路のバッチ全体で特定のオブザーバブルの勾配の分散を計算するヘルパー関数を作成します。
3.1 セットアップして実行する
生成するランダム回路の数、および、それらに対する量子ビットの深さおよび量を選択します。次に、結果をプロットします。
このプロットは、量子機械学習の問題では、ランダムな QNN 仮説を単純に推測しても、最良の結果を期待することはできないことを示しています。学習が発生する可能性のある点まで勾配を変化させるには、モデル回路に何らかの構造が存在する必要があります。
4. ヒューリスティック
Grant、2019 による興味深いヒューリスティックによると、ランダムに非常に近い状態(完全にランダムではない)で開始できます。McClean et al. と同じ回路を使用して、著者は、「不毛のプラトー」を回避するために、古典的な制御パラメータに対して異なる初期化手法を提案します。初期化手法は、完全にランダムな制御パラメータで一部のレイヤーを開始しますが、その直後のレイヤーでは、最初のいくつかのレイヤーによって行われた最初の変換が取り消されるようにパラメータを選択します。著者はこれをアイデンティティブロックと呼んでいます。
このヒューリスティックの利点は、1 つのパラメータを変更するだけで、その時点のブロック以外の他のすべてのブロックがそのままになり、勾配信号は以前よりはるかに強くなります。これにより、ユーザーは、強い勾配信号を取得するために変更する変数とブロックを選択できます。このヒューリスティックは、トレーニングフェーズ中にユーザーが「不毛の高原」に陥るのを防ぐことはできません(完全な同時更新を制限します)。「高原」の外から開始できることを保証するだけです。
4.1 新しい QNN の構築
次に、アイデンティティブロック QNN を生成する関数を作成します。この実装は、論文の実装とは少し異なります。ここでは、1 つのパラメータの勾配の振る舞いを見て、McClean et al と一致するようにして、いくつかの簡略化を行います。
アイデンティティブロックを生成してモデルをトレーニングするには、通常、 ではなく が必要です。そうしないと、トレーニング後も常にアイデンティティを取得します。アイデンティティブロックの数の選択は経験に基づいています。ブロックが深いほど、ブロックの中央の分散は小さくなります。ただし、ブロックの開始時と終了時では、パラメータ勾配の分散が大きい必要があります。
4.2 比較
ここでは、ヒューリスティックが勾配の分散がすぐに消えないようにするのに役立つことがわかります。
これは、(ほぼ)ランダムな QNN からより強い勾配信号を取得する上での大きな改善です。