カスタム トレーニング モデルを使用している場合は、特定のパラメータを構成して説明を改善できます。このガイドでは、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
を返します。
instanceOutputValue
と baselineOutputValue
の差がいずれかの属性で 0.05 未満の場合は、入力ベースラインを変更する必要がある場合があります。
構成を調整する
以降のセクションでは、Vertex Explainable AI の構成を調整して誤差を減らす方法について説明します。次の変更を行うには、更新された ExplanationSpec
で新しい Model
リソースを構成するか、Endpoint
リソースに再デプロイするか新しいバッチ予測を取得することで、既存の Model
の ExplanationSpec
をオーバーライドする必要があります。
ステップまたは経路を増やす
近似誤差を減らすには、次の値を大きくします。
- サンプリングされた Shapley の経路の数(
SampledShapleyAttribution.pathCount
) - 統合勾配(
IntegratedGradientsAttribution.stepCount
)または XRAI(XraiAttribution.stepCount
)の積分ステップ数
ベースラインを調整する
入力ベースラインは、追加情報のない特徴を表します。表形式モデルのベースラインは、トレーニング データに関連した中央値、最小値、最大値、ランダム値のいずれかです。同様に、画像モデルのベースラインは、黒い画像、白い画像、灰色の画像、ランダムなピクセル値を持つ画像のいずれかです。
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"
}
}
}
次のステップ
- このページで説明する構成変更を実装するには、説明の構成のガイドに従ってください。