VQEやQAOA、量子機械学習(QML)は、どれも「パラメータ付きの量子回路を少しずつ調整して最適化する」という共通の形をしています。この最適化に欠かせないのが**勾配(微分)**ですが、カナダのXanadu社が開発するPythonライブラリ PennyLane(ペニーレーン) を使うと、勾配計算を自分で実装しなくてもqml.grad()の一行で済みます。この記事ではインストールから、実際に回路を最適化するところまでを手を動かしながら確認します。
この記事で分かること
- PennyLaneは、量子回路の出力を古典的な自動微分(バックプロパゲーション)と同じ感覚で微分できるPython製の量子機械学習ライブラリであること
- `@qml.qnode`で回路を関数化し、`qml.grad()`を呼ぶだけで勾配が求まり、`GradientDescentOptimizer`でパラメータを最適化できること
- 内部ではシミュレータ上はバックプロパゲーション、実機では「パラメータシフト則」で勾配を計算しており、使う`diff_method`を切り替えられること
対象読者:Qiskitなどで量子回路の基本を触ったことがあり、次に変分量子アルゴリズムや量子機械学習を自分のコードで試したいエンジニアの方
執筆:ゆるふわ量子編集部 最終更新日:2026年10月4日
準備するもの
- Python 3.9以降
- 量子コンピュータの実機は不要(まずは手元のシミュレータだけで完結します)
インストール
pip install pennylane
PennyLaneには高速なローカルシミュレータdefault.qubitが標準で付属しているので、これだけで最初の一歩が踏み出せます。
最初の量子回路を書く
PennyLaneでは、量子回路を関数として定義し、@qml.qnodeで「デバイス」に結びつけることでQNode(Quantum Node)という実行可能な関数にします。
import pennylane as qml
from pennylane import numpy as np
dev = qml.device("default.qubit", wires=1) # 1量子ビットのシミュレータ
@qml.qnode(dev)
def energy(theta):
qml.RY(theta, wires=0) # 回転ゲートで量子ビットを回す
return qml.expval(qml.PauliZ(0)) # Z観測量の期待値を返す
print(energy(0.3))
実行すると 0.9553364891256059 が返ってきます。これは理論値 cos(0.3) と一致します。energyは普通のPython関数のように値を渡して呼び出せるのに、中身は量子回路というのがQNodeの特徴です。
QNode(キューノード)
PennyLaneで量子回路を表す基本単位。Pythonの関数に@qml.qnode(device)を付けることで作られ、通常の関数と同じように呼び出せるが、内部では指定したデバイス(シミュレータや実機)上で量子回路が実行される。自動微分の対象にもなるため、古典MLのレイヤーと組み合わせてハイブリッドなモデルを組める。
自動微分で勾配を求める
パラメータシフト則をQiskitで実装した記事では、θ+π/2とθ-π/2の期待値を自分で計算して勾配を求めました。PennyLaneなら、その計算をqml.grad()に任せられます。
theta = np.array(0.3, requires_grad=True)
grad_fn = qml.grad(energy)
print("勾配:", grad_fn(theta))
出力は -0.2955202066613397。理論値 -sin(0.3) と一致します。requires_grad=Trueを付けたnumpy配列(PennyLane独自のpennylane.numpy)を使うだけで、energyという量子回路そのものを微分できました。パラメータシフト則の中身を知らなくても使えますが、Qiskitでの実装記事を読んでおくと「裏で何が起きているか」が分かって理解が深まります。
内部では何をしているの?
PennyLaneはdefault.qubitのようなシミュレータ上ではバックプロパゲーション(diff_method="backprop")を使い高速に勾配を求めますが、実機やバックプロパゲーションに対応しないデバイスでは自動的にパラメータシフト則(diff_method="parameter-shift")に切り替わります。@qml.qnode(dev, diff_method="parameter-shift")のように明示的に指定することもでき、シミュレータ上でも実機と同じ計算方法を確かめられます。
勾配降下法で最適化する
勾配が求まれば、あとはGradientDescentOptimizerに渡すだけで最適化ループが書けます。ここではenergyを最小化する、つまり観測量Zの期待値を-1に近づけてみます。
dev = qml.device("default.qubit", wires=1)
@qml.qnode(dev, diff_method="parameter-shift")
def energy(theta):
qml.RY(theta, wires=0)
return qml.expval(qml.PauliZ(0))
theta = np.array(0.3, requires_grad=True)
opt = qml.GradientDescentOptimizer(stepsize=0.4)
for i in range(30):
theta = opt.step(energy, theta)
print("最適化後のtheta:", theta)
print("最小エネルギー:", energy(theta))
30回のステップで theta が π に近づき、最小エネルギー は -0.9999999999646078 ――ほぼ -1 まで収束します。これは1量子ビット版の超シンプルなVQEと言えます。VQE入門で紹介した「パラメータを調整してエネルギーの期待値を最小化する」という考え方を、PennyLaneなら数行のコードで体験できます。
Qiskitでパラメータシフトを実装
- θ±π/2の期待値を自分で計算して勾配を求める
- 最適化ループも自分で書く
- 『中身』が見えるので学習・デバッグに向く
PennyLaneで自動微分
- qml.grad()を呼ぶだけで勾配が求まる
- Optimizerクラスで最適化ループも用意されている
- QAOAやQMLなど実用コードを素早く書ける
まとめ
- PennyLaneは
@qml.qnodeで量子回路をPython関数(QNode)にし、qml.grad()で自動微分できるライブラリ - シミュレータ上はバックプロパゲーション、実機ではパラメータシフト則で勾配を計算しており、
diff_methodで切り替えられる GradientDescentOptimizerを使えば、VQEのような「パラメータを調整してエネルギーを最小化する」処理を数行で書ける- Qiskitで勾配計算の中身を理解してから使うと、PennyLaneの自動微分のありがたさがより実感できる
もう少し詳しく(背景)
PennyLaneは2018年にXanadu社が発表した、量子回路の「差分可能プログラミング(differentiable programming)」を目的としたPythonフレームワークです12。Apache License 2.0のオープンソースで公開されており、default.qubitのような内蔵シミュレータだけでなく、プラグインを通じてQiskit(IBM)・Cirq(Google)・Amazon Braketなど他社のシミュレータや実機にも同じコードでアクセスできる設計になっています3。
勾配計算の仕組みとしては、シミュレータ上では古典MLで使われるのと同じバックプロパゲーションが使えますが、実機では状態そのものを観測できないため使えません。そこで使われるのが、パラメータシフト則の記事で解説した「回転ゲートのパラメータを±π/2ずらした2点の期待値の差」から厳密な勾配を求める手法です4。PennyLaneはこの切り替えをdiff_method引数で吸収し、ユーザーがシミュレータと実機のどちらを使っていても同じqml.grad()のインターフェースで勾配を扱えるようにしています。
次に読むなら
- VQE入門|Qiskitで変分量子固有値ソルバーを実装 — パラメータ付き回路でエネルギーを最小化する考え方を、より詳しく知りたい方に
- パラメータシフト則をQiskitで実装 — 今回PennyLaneが裏で使っている勾配計算の中身を手を動かして確認したい方に
- 量子機械学習(QML)入門 — 変分量子分類器など、QMLの全体像を基礎から知りたい方に
- QAOA入門|Qiskitで最大カット問題を解く — 同じ「パラメータ最適化」の考え方を組合せ最適化に応用する例を見たい方に
参考資料・出典
- PennyLane: Automatic differentiation of hybrid quantum-classical computations | arXivPennyLaneの設計と自動微分の仕組みを解説する原論文(Bergholm et al., 2018)
- Xanadu Releases PennyLane: The First Dedicated Machine Learning Software for Quantum ComputersPennyLaneの発表時の告知記事。オープンソースのQMLソフトウェアとしての位置づけを紹介
- PennyLane Documentation公式ドキュメント。QNode・diff_method・デバイスプラグインなどのAPIリファレンス
- Tutorial: Variational classifier | PennyLane Demos変分量子分類器の公式チュートリアル。QMLへの発展的な応用例
ゆるふわポータルでは、一次情報・公的資料にもとづき、専門用語をできるだけやさしく翻訳することを心がけています。内容に誤りや古い情報がある場合は、お問い合わせからご連絡ください。
執筆:ゆるふわ量子編集部 最終更新日:2026年10月4日
Footnotes
-
Bergholm, V. et al. (2018). "PennyLane: Automatic differentiation of hybrid quantum-classical computations." arXiv:1811.04968。PennyLaneの設計思想と自動微分の仕組みを説明する原論文。 ↩
-
Xanadu, "Xanadu Releases PennyLane: The First Dedicated Machine Learning Software for Quantum Computers"(2018年)。PennyLaneがオープンソースのQML向けフレームワークとして発表された際の告知。 ↩
-
PennyLaneはプラグイン機構を通じてQiskit・Cirq・Amazon Braketなど他社のシミュレータ・実機にも接続できる。公式ドキュメント(docs.pennylane.ai)参照。 ↩
-
Mitarai, K. et al. (2018) および Schuld, M. et al. (2019) が確立したパラメータシフト則。詳細はパラメータシフト則をQiskitで実装を参照。 ↩
