Ao trabalhar com modelos treinados personalizados, é possível configurar parâmetros específicos para melhorar suas explicações. Neste guia, você verá como inspecionar as explicações recebidas do Vertex Explainable AI em caso de erros e como ajustar a configuração da Vertex Explainable AI para reduzir os erros.
Se você quiser usar o Vertex Explainable AI com um modelo tabular do AutoML, não será necessário realizar nenhuma configuração. O Vertex AI configura automaticamente o modelo para o Vertex Explainable AI. Pule este documento e leia Como receber explicações.
Os métodos de atribuição de recursos da Vertex Explainable AI são baseados em variantes de valores de Shapley. Como os valores de Shapley são computacionalmente caros, a Vertex Explainable AI fornece aproximações em vez dos valores exatos.
É possível reduzir o erro de aproximação e se aproximar dos valores exatos alterando as seguintes entradas:
- aumentando o número de etapas integrais ou o número de caminhos;
- alterando a linha de base de entrada que você selecionou;
- adicionando mais linhas de base de entrada. Com os gradientes integrados e os métodos de XRAI, o uso de linhas de base extras aumenta a latência. Usar linhas de base extras com o método Sampled Shapley não aumenta a latência.
Inspecionar explicações para erros
Depois de solicitar e receber explicações da Vertex Explainable AI, é possível verificar as explicações sobre o erro de aproximação. Se as explicações tiverem um erro de aproximação aproximada, talvez elas não sejam confiáveis. Nesta seção, descrevemos várias maneiras de verificar erros.
Verifique o campo approximationError
Para cada
Attribution
,
a Vertex Explainable AI retorna o erro de aproximação no campo approximationError
. Se
o erro de aproximação exceder 0,05, ajuste a configuração de
Vertex Explainable AI.
Para a técnica de gradientes integrados, calculamos o erro de aproximação ao comparar a soma das atribuições de recursos com a diferença entre os valores previstos para a pontuação de entrada e a pontuação de referência. Para a técnica de gradientes integrados, a atribuição de recursos é uma aproximação do valor total dos gradientes entre o valor de referência e a entrada. Usamos a regra de quadrado gaussiano para aproximar a integral por ser mais precisa do que os métodos de Riemann Sum.
Verificar a diferença entre previsões e a saída básica
Para cada
Attribution
,
a Vertex Explainable AI retornainstanceOutputValue
, que representa a parte da
saída de previsão relacionada às atribuições de recursos, e um
baselineOutputValue
, que representa o que seria essa parte
da saída de previsão no caso de a previsão ser feita em uma base de entrada em vez de uma instância
de entrada real.
Se a diferença entre instanceOutputValue
e baselineOutputValue
for menor que 0,05 para qualquer atribuição, talvez seja necessário alterar os valores de referência de entrada.
Ajustar a configuração
Nas seções a seguir, descrevemos maneiras de ajustar sua configuração de Vertex Explainable AI
para reduzir o erro. Para fazer qualquer uma das alterações a seguir, você deveconfigurar um novo
Model
com um recursoExplanationSpec
oumodificar o
ExplanationSpec
do seu appModel
implantando-o novamente em umEndpoint
recurso ou recebendo novas previsões em lote.
Aumentar etapas ou caminhos
Para reduzir o erro de aproximação, aumente:
- o número de caminhos para o Sampled Shapley (
SampledShapleyAttribution.pathCount
) - o número de etapas integrais para gradientes integrados (
IntegratedGradientsAttribution.stepCount
) ou XRAI (XraiAttribution.stepCount
)
Ajustar linhas de base
Os valores de referência de entrada representam um recurso que não fornece mais informações. Os valores de referência para modelos tabulares podem ser valores médios, mínimos, máximos ou aleatórios em relação aos dados de treinamento. Da mesma forma, para modelos de imagem, os valores de referência podem ser uma imagem preta, branca ou cinza ou uma imagem com valores de pixel aleatórios.
Ao configurar a Vertex Explainable AI, é possível especificar o
campo input_baselines
.
Caso contrário, a Vertex AI escolhe valores de referência de entrada para você. Se você encontrar os problemas descritos nas seções anteriores deste guia, convém ajustar o input_baselines
para cada entrada da sua Model
.
Em geral:
- comece com uma linha de base que representa valores médios;
- altere essa linha de base para uma representando valores aleatórios;
- tente duas linhas de base, representando os valores mínimo e máximo;
- adicione outra linha de base que representa valores aleatórios.
Exemplo de dados tabulares
O código Python a seguir cria uma mensagem ExplanationMetadata
para um modelo hipotético do TensorFlow treinado em dados tabulares.
Observe que input_baselines
é uma lista na qual é possível especificar várias linhas de base. Este exemplo define apenas uma linha de base. A linha de base é uma lista de valores médios para os dados de treinamento (train_data
neste exemplo).
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"
}
}
}
Consulte Como configurar explicações para modelos treinados
personalizados para mais contexto sobre como usar
este ExplanationMetadata
Para definir duas linhas de base que representam valores mínimo e máximo, defina input_baselines
da seguinte forma: [train_data.min().values.tolist(), train_data.max().values.tolist()]
Exemplo de dados de imagem
O código Python a seguir cria uma mensagem ExplanationMetadata
para um modelo hipotético do TensorFlow treinado em dados de imagem.
Observe que input_baselines
é uma lista na qual é possível especificar várias linhas de base. Este exemplo define apenas uma linha de base. A linha de base é uma lista de valores aleatórios. Usar valores aleatórios para uma linha de base de imagem é uma boa abordagem se as imagens em seu conjunto de dados de treinamento tiverem muito preto e branco.
Caso contrário, defina input_baselines
como [0, 1]
para representar imagens em preto e branco.
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"
}
}
}
A seguir
- Siga as instruções do guia Como configurar as explicações para implementar as alterações de configuração descritas nesta página.