Análisis de sensibilidad en redes neuronales profundas

14

Después de una pregunta ya respondida ( Extrayendo la importancia del peso de la red de alimentación de una capa ) Estoy buscando inferencia sobre la relevancia de las entradas en las redes neuronales.

Teniendo en cuenta una red profunda, donde reconstruir la importancia de la entrada yendo hacia atrás a través de las capas desde el nodo de salida de interés puede ser difícil o llevar mucho tiempo, me preguntaba si había algún marco teórico para realizar análisis de sensibilidad para redes neuronales, básicamente cambiar ligeramente ingrese y considere cómo cambia el nodo de salida de interés.

¿Existe una forma canónica de realizar algún tipo de análisis de sensibilidad en redes neuronales?

Realmente agradecería algún código de Python para hacerlo, si hay alguno

Tommaso Guerrini
fuente

Respuestas:

12

yRmy=f(x)xRdf

Jij(x)=xjfi(x)

fxΔjiΔJij(x)

Jij(x)ijxfes, en general, no lineal, esta noción de sensibilidad depende de la entrada; Puede ser grande en algunas regiones y cercano a cero en otras. Si desea algún tipo de medida resumida de cuán fuertemente dependen las salidas de las entradas, tendría que agregar sobre múltiples valores de entrada. Por ejemplo, podría tomar el valor absoluto del jacobiano, promediado sobre todas las entradas en el conjunto de entrenamiento (que actúa como un sustituto del valor esperado con la distribución subyacente de las entradas). Por supuesto, este tipo de resumen terminará descartando información, por lo que podría ser engañoso en algunas circunstancias.

Puede usar la regla de la cadena para derivar una expresión para el jacobiano, de manera similar a cómo derivaría el gradiente de la función de pérdida con los parámetros para usar con backprop. También puede calcularlo utilizando la diferenciación automática, utilizando una biblioteca como Theano, TensorFlow, etc. No hay muchas razones para realizar una diferenciación finita (es decir, simular realmente la perturbación y medir el cambio en la salida), a menos que la función que implementa su red no sea diferenciable ( en cuyo caso el jacobiano no existe).

Un par de advertencias: si las entradas tienen unidades / escalas diferentes entre sí, las sensibilidades también tendrán unidades / escalas diferentes, y no se pueden comparar directamente. Estandarizar / escalar las entradas es una posible solución. También es importante tener en cuenta que este tipo de análisis nos informa sobre el modelo en sí, pero no necesariamente sobre la distribución subyacente que generó los datos. Por ejemplo, si dos entradas están correlacionadas, el modelo podría terminar usando la primera pero no la segunda. En este caso, encontraríamos que la sensibilidad es alta para la primera entrada y baja para la segunda, pero no deberíamos concluir que la primera entrada es inherentemente más importante para predecir la salida en general.

Este artículo debería ser de su interés.

usuario20160
fuente
gran respuesta y excelente artículo! Si alguien está interesado en implementar este método, puede encontrar una buena implementación del cálculo jacobiano aquí: medium.com/unit8-machine-learning-publication/…
pcko1