Skip to main content
Influenciae


Influenciae is a Python toolkit dedicated to computing influence values for the discovery of potentially problematic samples in a dataset and the generation of data-centric explanations for deep learning models. In this library based on Tensorflow, we gather state-of-the-art methods for estimating the importance of training samples and their influence on test data-points for validating the quality of datasets and of the models trained on them.

🔥 Tutorials

We propose some hands-on tutorials to get familiar with the library and it's API:

🚀 Quick Start

Influenciae requires a version of python 3.7 or higher and several libraries, including Tensorflow and Numpy. Installation can be done using Pypi:

pip install influenciae

Once Influenciae is installed, there are two major applications for the different modules (that all follow the same API). So, except for group-specific functions that are only available on the influence module, all the classes are able to compute self-influence values, the influence with one point wrt another, as well as find the top-k samples for both of these situations.

Discovering influential examples

Particularly useful when validating datasets, influence functions (and related notions) allow for gaining an insight into what samples the models thinks to be "important". For this, the training dataset and a trained model are needed.

from deel.influenciae.common import InfluenceModel, ExactIHVP
from deel.influenciae.influence import FirstOrderInfluenceCalculator
from deel.influenciae.utils import ORDER

# load the model, the training loss (without reduction) and the training data (with the labels and in a batched TF dataset)

influence_model = InfluenceModel(model, start_layer=target_layer, loss_function=loss_function)
ihvp_calculator = ExactIHVP(influence_model, train_dataset)
influence_calculator = FirstOrderInfluenceCalculator(influence_model, train_dataset, ihvp_calculator)
data_and_influence_dataset = influence_calculator.compute_influence_values(train_dataset)
# or influence_calculator.compute_top_k_from_training_dataset(train_dataset, k_samples, ORDER.DESCENDING) when the
# dataset is too large

This is also explained more in depth in the Getting Started tutotial Open In Colab

Explaining neural networks through their training data

Another application is to explain some model's predictions by looking on which training samples they are based on. Again, the training dataset, the model and the samples we wish to explain are needed.

from deel.influenciae.common import InfluenceModel, ExactIHVP
from deel.influenciae.influence import FirstOrderInfluenceCalculator
from deel.influenciae.utils import ORDER

# load the model, the training loss (without reduction), the training data and
# the data to explain (with the labels and in batched a TF dataset)

influence_model = InfluenceModel(model, start_layer=target_layer, loss_function=loss_function)
ihvp_calculator = ExactIHVP(influence_model, train_dataset)
influence_calculator = FirstOrderInfluenceCalculator(influence_model, train_dataset, ihvp_calculator)
data_and_influence_dataset = influence_calculator.estimate_influence_values_in_batches(samples_to_explain, train_dataset)
# or influence_calculator.top_k(samples_to_explain, train_dataset, k_samples, ORDER.DESCENDING) when the
# dataset is too large

This is also explained more in depth in the Getting Started tutorial Open In Colab

Determining the influence of groups of samples

The previous examples use notions of influence that are applied individually to each data-point, but it is possible to extend this to groups. That is, answer the question of what would a model look like if it hadn't seen a whole group of data-points during training, for example. This can be computed namely using the FirstOrderInfluenceCalculator and SecondOrderInfluenceCalculator, for implementations where pairwise interactions between each of the data-points are not taken into account and do, respectively.

For obtaining the groups' influence:

from deel.influenciae.common import InfluenceModel, ExactIHVP
from deel.influenciae.influence import SecondOrderInfluenceCalculator

# load the model, the training loss (without reduction), the training data and
# the data to explain (with the labels and in a batched TF dataset)

influence_model = InfluenceModel(model, start_layer=target_layer, loss_function=loss_function)
ihvp_calculator = ExactIHVP(influence_model, train_dataset)
influence_calculator = SecondOrderInfluenceCalculator(influence_model, train_dataset, ihvp_calculator)  # or FirstOrderInfluenceCalculator
data_and_influence_dataset = influence_calculator.estimate_influence_values_group(groups_train, groups_to_explain)

For the data-centric explanations:

from deel.influenciae.common import InfluenceModel, ExactIHVP
from deel.influenciae.influence import SecondOrderInfluenceCalculator

# load the model, the training loss (without reduction), the training data and
# the data to explain (with the labels and in a batched TF dataset)

influence_model = InfluenceModel(model, start_layer=target_layer, loss_function=loss_function)
ihvp_calculator = ExactIHVP(influence_model, train_dataset)
influence_calculator = SecondOrderInfluenceCalculator(influence_model, train_dataset, ihvp_calculator)  # or FirstOrderInfluenceCalculator
data_and_influence_dataset = influence_calculator.estimate_influence_values_group(groups_train)

📦 What's Included

All the influence calculation methods work on Tensorflow models trained for any sort of task and on any type of data. Visualization functionality is implemented for image datasets only (for the moment).

Influence Method Source Tutorial
Influence Functions Paper Open In Colab
RelatIF Paper Open In Colab
Influence Functions (first order, groups) Paper Open In Colab
Influence Functions (second order, groups) Paper Open In Colab
Arnoldi iteration (Scaling Up Influence Functions) Paper Open In Colab
Trac-In Paper Open In Colab
Representer Point Selection (L2) Paper Open In Colab
Representer Point Selection (Local Jacobian Expansion) Paper Open In Colab
Boundary-based influence -- Open In Colab

👀 See Also

This library proposes implementations of some of the different popular ways of calculating the influence of data-points on TF, but there are also other ones using other frameworks.

Some other tools for efficiently computing influence functions.

More from the DEEL project:

  • Xplique a Python library exclusively dedicated to explaining neural networks.
  • deel-lip a Python library for training k-Lipschitz neural networks on TF.
  • deel-torchlip a Python library for training k-Lipschitz neural networks on PyTorch.
  • DEEL White paper a summary of the DEEL team on the challenges of certifiable AI and the role of data quality, representativity and explainability for this purpose.

🙏 Acknowledgments

This project received funding from the French ”Investing for the Future – PIA3” program within the Artificial and Natural Intelligence Toulouse Institute (ANITI). The authors gratefully acknowledge the support of the DEEL project.

👨‍🎓 Creators

This library was first created as a research tool by Agustin Martin PICARD in the context of the DEEL project with the help of David Vigouroux and Thomas FEL. Later on, Lucas Hervier joined the team to transform the code base as a practical user-(almost)-friendly and efficient tool.

🗞️ Citation

If you use Influenciae as part of your workflow in a scientific publication, please consider citing the 🗞️ official paper:

@unpublished{picard:hal-04284178,
  TITLE = {{Influenci{\ae}: A library for tracing the influence back to the data-points}},
  AUTHOR = {Picard, Agustin Martin and Hervier, Lucas and Fel, Thomas and Vigouroux, David},
  URL = {https://hal.science/hal-04284178},
  NOTE = {working paper or preprint},
  YEAR = {2023},
  MONTH = Nov,
  KEYWORDS = {Data-centric ai ; XAI ; Explainability ; Influence Functions ; Open-source toolbox},
  PDF = {https://hal.science/hal-04284178/file/ms.pdf},
  HAL_ID = {hal-04284178},
  HAL_VERSION = {v1},
}

📝 License

The package is released under MIT license.

Metadata

Release files for Influenciae 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for Influenciae 0.3.0
File Size Uploaded
Influenciae-0.3.0.tar.gz 63.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for Influenciae 0.3.0
File Interpreter ABI Platform
Influenciae-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 150.0 kB

Release files / Influenciae-0.3.0.tar.gz

Download URL Influenciae-0.3.0.tar.gz
Size 63.2 kB
Tags Source
SHA-256 checksum
How to use checksums
e29895b96704aa0b13be6f57b8a85e61999345bc477f9692cbb4f3e6ada7023c
BLAKE2b-256 checksum
How to use checksums
91b353c18232bbe49617829cdec681af8e5c427cee91be4026fe89e3614f5cb1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.12.2

Release files / Influenciae-0.3.0-py3-none-any.whl

Download URL Influenciae-0.3.0-py3-none-any.whl
Size 86.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d6a89c2b3b79454ef2afe771a558a2cff5db11d250292ee4cab53b7dec360a65
BLAKE2b-256 checksum
How to use checksums
0ef25dc5980d2e9ce1a98481597128c24f4184193ee8b965d940bec9d2e519d7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.12.2

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page