A análise de sensibilidade que você sugere corresponde ao exame das derivadas parciais das saídas em relação às entradas. Digamos que o vetor de saída seja dado por y = f ( x ) , onde x ∈ R d é o vetor de entrada ef é a função que a rede implementa. O jacobiano das saídas escreve as entradas é:y∈ Rmy= f( X )x ∈ Rdf
Jeu j( x ) = ∂∂xjfEu( X )
O jacobiano fornece a taxa local de mudança de cada saída em cada entrada, por isso nos diz como se comportará em resposta a perturbações infinitesimais. Se começarmos com entrada x e adicione um valor infinitesimal Δ ao j th de entrada, esperamos que o i th saída para aumentar em Δ J i j ( x ) .fxΔjEuΔ Jeu j( X )
Se tiver grande magnitude, isso significa que a saída i é sensível à entrada j na vizinhança de x . Porque fJeu j( X )Eujxfé, em geral, não linear, essa noção de sensibilidade depende da entrada; pode ser grande em algumas regiões e próximo de zero em outras. Se você deseja algum tipo de medida resumida de quão fortemente as saídas dependem das entradas, você deve agregar vários valores de entrada. Por exemplo, você pode considerar o valor absoluto do jacobiano, calculado sobre todas as entradas no conjunto de treinamento (que atua como substituto do valor esperado na distribuição subjacente de entradas). Obviamente, esse tipo de resumo acabará descartando informações, podendo ser enganoso em algumas circunstâncias.
Você pode usar a regra de cadeia para derivar uma expressão para o jacobiano, da mesma forma que derivaria o gradiente da função de perda e escrever os parâmetros para uso com backprop. Você também pode computá-lo usando diferenciação automática, usando uma biblioteca como Theano, TensorFlow, etc. Não há muitas razões para realizar diferenciações finitas (ou seja, simular a perturbação e medir a mudança na saída), a menos que a função que sua rede implementa seja indiferenciada ( nesse caso, o jacobiano não existe).
Algumas advertências: se as entradas tiverem unidades / escalas diferentes umas das outras, as sensibilidades também terão unidades / escalas diferentes e não poderão ser comparadas diretamente. Padronizar / dimensionar as entradas é uma solução possível. Também é importante ter em mente que esse tipo de análise nos fala sobre o modelo em si, mas não necessariamente a distribuição subjacente que gerou os dados. Por exemplo, se duas entradas estiverem correlacionadas, o modelo pode acabar usando a primeira, mas não a segunda. Nesse caso, descobriríamos que a sensibilidade é alta para a primeira entrada e baixa para a segunda, mas não devemos concluir que a primeira entrada é inerentemente mais importante para prever a saída em geral.
Este artigo deve ser de interesse.