手を上げるキュビットくんゆるふわ量子コンピュータ
計算中のキュビットくん

PennyLane入門|量子回路を自動微分して最適化する

2026-10-04 ・ 実践

#PennyLane#Python#量子機械学習#実践

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の期待値を自分で計算して勾配を求める
  • 最適化ループも自分で書く
  • 『中身』が見えるので学習・デバッグに向く
VS
🪶

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()のインターフェースで勾配を扱えるようにしています。

次に読むなら

参考資料・出典

ゆるふわポータルでは、一次情報・公的資料にもとづき、専門用語をできるだけやさしく翻訳することを心がけています。内容に誤りや古い情報がある場合は、お問い合わせからご連絡ください。

執筆:ゆるふわ量子編集部 最終更新日:2026年10月4日

Footnotes

  1. Bergholm, V. et al. (2018). "PennyLane: Automatic differentiation of hybrid quantum-classical computations." arXiv:1811.04968。PennyLaneの設計思想と自動微分の仕組みを説明する原論文。 ↩

  2. Xanadu, "Xanadu Releases PennyLane: The First Dedicated Machine Learning Software for Quantum Computers"(2018年)。PennyLaneがオープンソースのQML向けフレームワークとして発表された際の告知。 ↩

  3. PennyLaneはプラグイン機構を通じてQiskit・Cirq・Amazon Braketなど他社のシミュレータ・実機にも接続できる。公式ドキュメント(docs.pennylane.ai)参照。 ↩

  4. Mitarai, K. et al. (2018) および Schuld, M. et al. (2019) が確立したパラメータシフト則。詳細はパラメータシフト則をQiskitで実装を参照。 ↩

この記事をシェア:𝕏 で共有LINEで送る

🔥 この分野の最新トレンドをチェック →

あわせて読みたい