特徴に基づく説明を改善する

カスタム トレーニング モデルを使用している場合は、特定のパラメータを構成して説明を改善できます。このガイドでは、Vertex Explainable AI から取得した説明にエラーがないかどうかを調べる方法と、Vertex Explainable AI の構成を調整してエラーを軽減する方法について説明します。

AutoML 表形式モデルで Vertex Explainable AI を使用する場合は、構成を行う必要はありません。Vertex AI は Vertex Explainable AI 用のモデルを自動的に構成します。このドキュメントをスキップして、説明の取得をご覧ください。

Vertex Explainable AI の特徴アトリビューション方式は、すべて Shapley 値のバリアントに基づいています。Shapley 値は非常に計算コストが高いため、Vertex Explainable AI は正確な値ではなく近似値を提供します。

次の入力を変更すると、近似誤差を減らして正確な値に近づけることができます。

  • 積分ステップまたは積分経路の数を増やします。
  • 選択した入力ベースラインを変更します。
  • 入力ベースラインを追加します。統合勾配と XRAI 方式では、追加のベースラインを使用するとレイテンシが増加します。サンプリングされた Shapley 方式で追加のベースラインを使用してもレイテンシは増加しません。

説明に誤差がないか確認する

Vertex Explainable AI に説明をリクエストして取得した後、説明に近似誤差があるか確認できます。説明に高い近似誤差がある場合、説明が信頼できない可能性があります。このセクションでは、エラーをチェックするいくつかの方法について説明します。

approximationError フィールドを確認する

Attribution に関して、Vertex Explainable AI は approximationError フィールドに近似誤差を返します。近似誤差が 0.05 を超える場合は、Vertex Explainable AI の構成の調整を検討してください。

統合勾配法では、特徴アトリビューションの合計と入力スコアの予測値とベースライン スコアの差を比較して近似誤差を計算します。統合勾配法の場合、特徴アトリビューションは、ベースラインと入力間の勾配値の近似値になります。リーマン和による方法より精度が高いため、ガウス求積法を使用して積分を近似します。

予測とベースライン出力の違いを確認する

Attribution に関して、Vertex Explainable AI は、特徴アトリビューションが対象となる予測出力の一部分を表す instanceOutputValue と、実際の入力インスタンスではなく、入力ベースラインで予測が実行された場合に、予測出力のこの部分がどうなるかを表す baselineOutputValue を返します。

instanceOutputValuebaselineOutputValue の差がいずれかの属性で 0.05 未満の場合は、入力ベースラインを変更する必要がある場合があります。

構成を調整する

以降のセクションでは、Vertex Explainable AI の構成を調整して誤差を減らす方法について説明します。次の変更を行うには、更新された ExplanationSpec で新しい Model リソースを構成するか、Endpoint リソースに再デプロイするか新しいバッチ予測を取得することで、既存の ModelExplanationSpec をオーバーライドする必要があります。

ステップまたは経路を増やす

近似誤差を減らすには、次の値を大きくします。

ベースラインを調整する

入力ベースラインは、追加情報のない特徴を表します。表形式モデルのベースラインは、トレーニング データに関連した中央値、最小値、最大値、ランダム値のいずれかです。同様に、画像モデルのベースラインは、黒い画像、白い画像、灰色の画像、ランダムなピクセル値を持つ画像のいずれかです。

Vertex Explainable AI を構成するときに、必要に応じて input_baselines フィールドを指定できます。指定しない場合、Vertex AI により入力ベースラインが選択されます。このガイドの前のセクションで説明した問題が発生した場合は、Model の入力ごとに input_baselines を調整することをおすすめします。

全般:

  • 中央値を表す 1 つのベースラインから始めます。
  • このベースラインを 1 つのランダム値を表すものに変更します。
  • 最小値と最大値を表す 2 つのベースラインを試します。
  • ランダム値を表す別のベースラインを追加します。

表形式データの例

次の Python コードは、表形式データでトレーニングされた仮想の TensorFlow モデル用の ExplanationMetadata メッセージを作成します。

input_baselines は、複数のベースラインを指定できるリストですので注意してください。この例では、ベースラインを 1 つだけ設定しています。ベースラインはトレーニング データの中央値のリストです。この例では train_data です。

explanation_metadata = {
    "inputs": {
        "FEATURE_NAME": {
            "input_tensor_name": "INPUT_TENSOR_NAME",
            "input_baselines": [train_data.median().values.tolist()],
            "encoding": "bag_of_features",
            "index_feature_mapping": train_data.columns.tolist()
        }
    },
    "outputs": {
        "OUTPUT_NAME": {
            "output_tensor_name": "OUTPUT_TENSOR_NAME"
        }
    }
}

この ExplanationMetadata の使用方法の詳細については、カスタムトレーニング モデルの説明を構成するをご覧ください。

最小値と最大値を表す 2 つのベースラインを設定するには、input_baselines を次のように設定します。[train_data.min().values.tolist(), train_data.max().values.tolist()]

画像データの例

次の Python コードは、画像データでトレーニングされた仮想の TensorFlow モデル用の ExplanationMetadata メッセージを作成します。

input_baselines は、複数のベースラインを指定できるリストですので注意してください。この例では、ベースラインを 1 つだけ設定しています。ベースラインはランダム値のリストです。トレーニング データセットの画像に多くの白黒が含まれている場合は、画像ベースラインにランダム値を使用すると効果的です。

それ以外の場合は、input_baselines[0, 1] に設定して黒と白の画像を表します。

random_baseline = np.random.rand(192,192,3)

explanation_metadata = {
    "inputs": {
        "FEATURE_NAME": {
            "input_tensor_name": "INPUT_TENSOR_NAME",
            "modality": "image",
            "input_baselines": [random_baseline.tolist()]
        }
    },
    "outputs": {
        "OUTPUT_NAME": {
            "output_tensor_name": "OUTPUT_TENSOR_NAME"
        }
    }
}

次のステップ

  • このページで説明する構成変更を実装するには、説明の構成のガイドに従ってください。