Source code for scikit_quri.backend.base_gradient_estimator
from abc import ABCMeta, abstractmethod
from typing import Sequence
from scikit_quri.circuit import LearningCircuit
from quri_parts.core.estimator import Estimatable, Estimates
from quri_parts.core.estimator.gradient import _ParametricStateT
[docs]class BaseGradientEstimator(metaclass=ABCMeta):
"""Gradient Estimatorを実行する際の基底クラス
estimate_gradientメソッドに対するinterfaceを定義
"""
[docs] @abstractmethod
def estimate_gradient(
self,
operators: Estimatable,
state: _ParametricStateT,
params: Sequence[float],
) -> Estimates[complex]:
"""
operatorsとstatesの組み合わせに対して勾配を計算する
operatorsまたはstatesのどちらかが1つの場合、もう一方の数に合わせて繰り返す
もしくは、両方の数が同じ場合、1対1で対応させる
それ以外の場合、ValueErrorを投げる
Args:
operators: 勾配を計算する演算子のリスト
states: 勾配を計算する状態のリスト
params: 勾配を計算するパラメータのリスト
Returns:
operatorsとstatesの組み合わせに対する勾配のリスト
"""
[docs] @abstractmethod
def estimate_learning_param_gradient(
self,
operators: Estimatable,
circuit: LearningCircuit,
params: Sequence[float],
) -> Sequence[complex]:
"""
学習パラメータに対する勾配を計算する
operatorsまたはstatesのどちらかが1つの場合、もう一方の数に合わせて繰り返す
もしくは、両方の数が同じ場合、1対1で対応させる
それ以外の場合、ValueErrorを投げる
Args:
operators: 勾配を計算する演算子のリスト
states: 勾配を計算する状態のリスト
params: 勾配を計算するパラメータのリスト
Returns:
operatorsとstatesの組み合わせに対する学習パラメータの勾配のリスト
"""