Implementación de modelos de redes neuronales interpretables en PyTorch

Mueve tu manita para hacer una fortuna, ¡dale un pulgar hacia arriba!

alternativa

Objetivo

La falta de interpretabilidad de los sistemas de aprendizaje profundo plantea un gran desafío para generar confianza humana. La complejidad de estos modelos hace que sea casi imposible que los humanos entiendan las razones subyacentes detrás de sus decisiones.

La falta de interpretabilidad de los sistemas de aprendizaje profundo dificulta la confianza humana.

Para abordar este problema, los investigadores han estado investigando activamente nuevas soluciones, lo que ha dado lugar a importantes innovaciones, como los modelos basados ​​en conceptos. Estos modelos no solo aumentan la transparencia del modelo, sino que también fomentan un nuevo sentido de confianza en la toma de decisiones del sistema al incorporar conceptos de alto nivel interpretables por humanos (como "color" o "forma") durante el proceso de capacitación. Por lo tanto, estos modelos pueden proporcionar explicaciones simples e intuitivas para sus predicciones basadas en los conceptos aprendidos, lo que permite a los humanos examinar las razones detrás de sus decisiones. ¡Eso no es todo! Incluso permiten que los humanos interactúen con los conceptos aprendidos, dándonos control sobre la decisión final.

Los modelos basados ​​en conceptos permiten a los humanos examinar el razonamiento detrás de las predicciones de aprendizaje profundo y nos devuelven el control de la decisión final.

En esta publicación de blog [1] , profundizaremos en estas técnicas y le proporcionaremos las herramientas para implementar modelos basados ​​en conceptos de última generación utilizando una interfaz PyTorch simple. A través de la experiencia práctica, aprenderá cómo aprovechar estos poderosos modelos para mejorar la interpretabilidad y, en última instancia, calibrar la confianza humana en sus sistemas de aprendizaje profundo.

Modelo de cuello de botella conceptual

En esta introducción, nos sumergiremos en el modelo de cuello de botella conceptual. Presentado en un documento presentado en la Conferencia Internacional sobre Aprendizaje Automático de 2020, el modelo tiene como objetivo aprender y predecir primero un conjunto de conceptos, como "color" o "forma", y luego usar estos conceptos para resolver tareas de clasificación posteriores:

alternativa

Al seguir este enfoque, podemos rastrear las predicciones hasta conceptos que brindan explicaciones como "el objeto de entrada es una {manzana} porque es {esférica} y {roja}".

Los modelos de cuello de botella conceptual primero aprenden un conjunto de conceptos, como "color" o "forma", y luego explotan estos conceptos para resolver tareas de clasificación posteriores.

lograr

为了说明概念瓶颈模型,我们将重新审视著名的 XOR 问题,但有所不同。我们的输入将包含两个连续的特征。为了捕捉这些特征的本质,我们将使用概念编码器将它们映射为两个有意义的概念,表示为“A”和“B”。我们任务的目标是预测“A”和“B”的异或 (XOR)。通过这个例子,您将更好地理解概念瓶颈如何在实践中应用,并见证它们在解决具体问题方面的有效性。

我们可以从导入必要的库并加载这个简单的数据集开始:

import torch
import torch_explain as te
from torch_explain import datasets
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split

x, c, y = datasets.xor(500)
x_train, x_test, c_train, c_test, y_train, y_test = train_test_split(x, c, y, test_size=0.33, random_state=42)

接下来,我们实例化一个概念编码器以将输入特征映射到概念空间,并实例化一个任务预测器以将概念映射到任务预测:

concept_encoder = torch.nn.Sequential(
    torch.nn.Linear(x.shape[1], 10),
    torch.nn.LeakyReLU(),
    torch.nn.Linear(108),
    torch.nn.LeakyReLU(),
    torch.nn.Linear(8, c.shape[1]),
    torch.nn.Sigmoid(),
)
task_predictor = torch.nn.Sequential(
    torch.nn.Linear(c.shape[1], 8),
    torch.nn.LeakyReLU(),
    torch.nn.Linear(81),
)
model = torch.nn.Sequential(concept_encoder, task_predictor)

然后我们通过优化概念和任务的交叉熵损失来训练网络:

optimizer = torch.optim.AdamW(model.parameters(), lr=0.01)
loss_form_c = torch.nn.BCELoss()
loss_form_y = torch.nn.BCEWithLogitsLoss()
model.train()
for epoch in range(2001):
    optimizer.zero_grad()

    # generate concept and task predictions
    c_pred = concept_encoder(x_train)
    y_pred = task_predictor(c_pred)

    # update loss
    concept_loss = loss_form_c(c_pred, c_train)
    task_loss = loss_form_y(y_pred, y_train)
    loss = concept_loss + 0.2*task_loss

    loss.backward()
    optimizer.step()

训练模型后,我们评估其在测试集上的性能:

c_pred = concept_encoder(x_test)
y_pred = task_predictor(c_pred)

concept_accuracy = accuracy_score(c_test, c_pred > 0.5)
task_accuracy = accuracy_score(y_test, y_pred > 0)

现在,在几个 epoch 之后,我们可以观察到概念和任务在测试集上的准确性都非常好(~98% 的准确性)!

由于这种架构,我们可以通过根据输入概念查看任务预测器的响应来为模型预测提供解释,如下所示:

c_different = torch.FloatTensor([01])
print(f"f({c_different}) = {int(task_predictor(c_different).item() > 0)}")

c_equal = torch.FloatTensor([11])
print(f"f({c_different}) = {int(task_predictor(c_different).item() > 0)}")

这会产生例如 f([0,1])=1 和 f([1,1])=0 ,如预期的那样。这使我们能够更多地了解模型的行为,并检查它对于任何相关概念集的行为是否符合预期,例如,对于互斥的输入概念 [0,1] 或 [1,0],它返回的预测y=1。

概念瓶颈模型通过将预测追溯到概念来提供直观的解释。

淹没在准确性与可解释性的权衡中

概念瓶颈模型的主要优势之一是它们能够通过揭示概念预测模式来为预测提供解释,从而使人们能够评估模型的推理是否符合他们的期望。

然而,标准概念瓶颈模型的主要问题是它们难以解决复杂问题!更一般地说,他们遇到了可解释人工智能中众所周知的一个众所周知的问题,称为准确性-可解释性权衡。实际上,我们希望模型不仅能实现高任务性能,还能提供高质量的解释。不幸的是,在许多情况下,当我们追求更高的准确性时,模型提供的解释往往会在质量和忠实度上下降,反之亦然。

在视觉上,这种权衡可以表示如下:

alternativa

可解释模型擅长提供高质量的解释,但难以解决具有挑战性的任务,而黑盒模型以提供脆弱和糟糕的解释为代价来实现高任务准确性。

Para ilustrar esta compensación en un entorno concreto, consideremos un modelo de cuello de botella conceptual aplicado a un punto de referencia un poco más exigente, el conjunto de datos de "trigonometría":

x, c, y = datasets.trigonometry(500)
x_train, x_test, c_train, c_test, y_train, y_test = train_test_split(x, c, y, test_size=0.33, random_state=42)

Después de entrenar la misma arquitectura de red en este conjunto de datos, observamos una caída significativa en la precisión de la tarea, que solo alcanzó alrededor del 80 %.

Los modelos conceptuales de cuello de botella no logran un equilibrio entre la precisión de la tarea y la calidad de la interpretación.

Esto plantea la pregunta: ¿estamos siempre obligados a elegir entre la precisión y la calidad de la explicación, o hay una manera de lograr un mejor equilibrio?

Referencia

[1]

Fuente:https://towardsdatascience.com/implement-interpretable-neural-models-in-pytorch-6a5932bdb078

Este artículo es publicado por mdnice multiplataforma

Supongo que te gusta

Origin blog.csdn.net/swindler_ice/article/details/131317757
Recomendado
Clasificación