Undistillable: Making A Nasty Teacher That CANNOT teach students
"Undistillable: Making A Nasty Teacher That CANNOT teach students"
Haoyu Ma, Tianlong Chen, Ting-Kuei Hu, Chenyu You, Xiaohui Xie, Zhangyang Wang
In ICLR 2021 Spotlight Oral
Overview
- We propose the concept of Nasty Teacher, a defensive approach to prevent knowledge leaking and unauthorized model cloning through KD without sacrificing performance.
- We propose a simple yet efficient algorithm, called self-undermining knowledge distillation, to directly build a nasty teacher through self-training, requiring no additional dataset nor auxiliary network.
Prerequisite
We use Pytorch 1.4.0, and CUDA 10.1. You can install them with
conda install pytorch=1.4.0 torchvision=0.5.0 cudatoolkit=10.1 -c pytorch
It should also be applicable to other Pytorch and CUDA versions.
Then install other packages by
pip install -r requirements.txt
Usage
Teacher networks
Step 1: Train a normal teacher network
python train_scratch.py --save_path [XXX]
Here, [XXX] specifies the directory of params.json
, which contains all hyperparameters to train a network. We already include all hyperparameters in experiments
to reproduce the results in our paper.
For example, normally train a ResNet18 on CIFAR-10
python train_scratch.py --save_path experiments/CIFAR10/baseline/resnet18
After finishing training, you will get training.log
, best_model.tar
in that directory.
The normal teacher network will serve as the adversarial network for the training of the nasty teacher.
Step 2: Train a nasty teacher network
python train_nasty.py --save_path [XXX]
Again, [XXX] specifies the directory of params.json
, which contains the information of adversarial networks and hyperparameters for training.
You need to specify the architecture of adversarial network and its checkpoint in this file.
For example, train a nasty ResNet18
python train_nasty.py --save_path experiments/CIFAR10/kd_nasty_resnet18/nasty_resnet18
Knowledge Distillation for Student networks
You can train a student distilling from normal or nasty teachers by
python train_kd.py --save_path [XXX]
Again, [XXX] specifies the directory of params.json
, which contains the information of student networks and teacher networks
For example,
- train a plain CNN distilling from a nasty ResNet18
python train_kd.py --save_path experiments/CIFAR10/kd_nasty_resnet18/cnn
- Train a plain CNN distilling from a normal ResNet18
python train_kd.py --save_path experiments/CIFAR10/kd_normal_resnet18/cnn
Citation
@inproceedings{
ma2021undistillable,
title={Undistillable: Making A Nasty Teacher That {\{}CANNOT{\}} teach students},
author={Haoyu Ma and Tianlong Chen and Ting-Kuei Hu and Chenyu You and Xiaohui Xie and Zhangyang Wang},
booktitle={International Conference on Learning Representations},
year={2021},
url={https://openreview.net/forum?id=0zvfm-nZqQs}
}