Skip to content

Latest commit

 

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DIVERSE: Disagreement-Inducing Vector Evolution For Rashomon Set Exploration [ICLR 2026]

Gilles Eerlings1,2,3  ·  Brent Zoomers1,2,4  ·  Jori Liesenborgs1,2  ·  Gustavo Rovelo Ruiz1,2  ·  Kris Luyten1,2,3

1 UHasselt Digital Future Lab  ·  2 Flanders Make  ·  3 Flanders AI Research  ·  4 FWO (Fonds Wetenschappelijk Onderzoek – Vlaanderen)


ICLR      

   

🌟 Overview

DIVERSE is a framework for systematically exploring the Rashomon set of neural networks, which is the collection of models that achieve similar accuracy to a reference model while differing in their predictive behavior.
The method augments pretrained networks with Feature-wise Linear Modulation (FiLM) layers and uses Covariance Matrix Adaptation Evolution Strategy (CMA-ES) to explore a latent modulation space, discovering diverse model variants without retraining or requiring gradient access.


✨ Key Ideas

  • 🎛 FiLM-based modulation: Introduces lightweight FiLM layers into a frozen pretrained model, enabling controlled activation shifts via a latent vector.
  • 🧬 CMA-ES optimization: Gradient-free evolutionary search over latent vectors, targeting disagreement while maintaining accuracy.
  • 📊 Rigorous Rashomon protocol: Enforces Rashomon membership on a validation set and reports diversity only on a held-out test set.
  • Scalable exploration: Substantially reduces computational costs compared to retraining-based approaches.

🚀 Getting Started

Requirements

System

  • Tested on Ubuntu 22.04 LTS
  • Requires a bash shell to run experiment scripts (.sh)
  • Requires an NVIDIA GPU with CUDA support
    (tested on GeForce RTX 4090 with CUDA 12.4)
  • Windows users may run the code inside WSL2 or a Linux container
    (not officially tested)

Software

Setup

conda env create -f environment.yml

Activate the new environment: conda activate diverse

Training the Pretrained Models and Generating Z Seeds

First, make the provided bash script executable:

chmod +x init.sh

Then run it:

./init.sh

This will:

  1. Train the reference (pretrained) models for each dataset.
  2. Generate initial latent vectors (Z seeds) used for CMA-ES exploration.

Running CMA-ES Search

Before running, ensure the conda environment is activated:

conda activate diverse

This script performs an extensive hyperparameter sweep, which can take a long time and heavily use the GPU. Parallelism is controlled through subprocesses; to adjust the number of workers, edit utils/experiment_parameters.py

You have to repeat the following command for each epsilon and each model type (exception for the vision transformer):

python run_epsilon_CMA.py --model_type=<model_type> --epsilon=<epsilon>
Command Line Arguments for run_epsilon_CMA.py
Argument Type Required Options Description
--model_type str mnist, resnet50_pneumonia, vgg16_cifar10, vision_transformer_cifar10 Type of model to use
--epsilon float 0.01, 0.02, 0.03, 0.04, 0.05 Epsilon value for the Rashomon requirement
--lambda_val float 0.0, 0.1, 0.2, 0.3, 0.4, 0.5 (default), 0.6, 0.7, 0.8, 0.9, 1.0 Lambda value used as a mixing weight for hard and soft disagreement

Evaluating CMA-ES Results

Once you have run all CMA-ES runs, you can evaluate each epsilon, z dimension and dataset combination with the following:

python -m CMA.CMA_evaluation --model_type=<model_type> --epsilon=<epsilon> --z_dim=<z_dim>
Command Line Arguments for CMA.CMA_evaluation.py
Argument Type Required Options Description
--model_type str mnist, resnet50_pneumonia, vgg16_cifar10, vision_transformer_cifar10 Type of model to use
--epsilon float 0.01, 0.02, 0.03, 0.04, 0.05 Epsilon value for the Rashomon requirement
--z_dim int 2, 4, 8, 16, 32, 64 Dimension of the z vector
--lambda_val float 0.0, 0.1, 0.2, 0.3, 0.4, 0.5 (default), 0.6, 0.7, 0.8, 0.9, 1.0 Lambda value used as a mixing weight for hard and soft disagreement

🏁 Running Baselines

Before running any baselines, ensure the conda environment is activated:

conda activate diverse

Dropout (Hsu et al., 2024)

We provide an implementation of the dropout-based Rashomon exploration method described in Hsu et al. (ICLR 2024).

python -m baselines.dropout --model=<model_type> --epsilon=<epsilon> --search_budget=<search_budget>
Command Line Arguments for baselines.dropout.py
Argument Type Required Options Description
--model str mnist, resnet50_pneumonia, vgg16_cifar10 Type of model to use
--epsilon float 0.01, 0.02, 0.03, 0.04, 0.05 Epsilon value for the Rashomon requirement
--search_budget int 162, 320, 640, 1284, 2562, 5120 Total number of models to evaluate (approx).

Retraining

Warning: Retraining is computationally expensive and may require significant time and GPU resources.

Training

python -m baselines.retraining --model=<model> --start_seed=<start_seed> --search_budget=<search_budget>
Command Line Arguments for baselines.retraining.py
Argument Type Required Options Description
--model str mnist, resnet, vgg Type of model to use
--start_seed int 42, 45 Starting seed value, vgg requires seed 45
--search_budget int 162, 320, 640, 1284, 2562, 5120 Total number of models to evaluate (approx).

Evaluation

After training, results can be evaluated on the test set. Outputs will be stored in a folder in the following path: baseline_evaluations/retraining/retraining_<model>/epsilon_<epsilon_value>/

python -m baselines.retraining_evaluator --model=<model> --epsilon=<epsilon> --search_budget=<search_budget>
Command Line Arguments for baselines.retraining_evaluator.py
Argument Type Required Options Description
--model str mnist, resnet, vgg Type of model to use
--epsilon float 0.01, 0.02, 0.03, 0.04, 0.05 Epsilon value for the Rashomon requirement
--search_budget int 162, 320, 640, 1284, 2562, 5120 Total number of models to evaluate should be the same as the budget used while training.

Plotting the results

To plot the results, you will first have to run each CMA search and evaluation for every dataset and epsilon, and have also run and evaluate all baselines for each dataset on the same epsilons.

Once the results are available, generate the plots with:

python -m utils.plotter

Citation

@inproceedings{
  eerlings2026diverse,
  title={{DIVERSE}: Disagreement-Inducing Vector Evolution for Rashomon Set Exploration},
  author={Gilles Eerlings and Brent Zoomers and Jori Liesenborgs and Gustavo Rovelo Ruiz and Kris Luyten},
  booktitle={The Fourteenth International Conference on Learning Representations},
  year={2026},
  url={https://openreview.net/forum?id=kQjSUHC84V}
}

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages