Dreaming to distill(Deep Inversion, data free distill)

文章链接:https://arxiv.org/abs/1912.08795

CVPR2020上做data-free蒸馏的。
什么是Data-free=》就是没有数据,只能自己生成数据
一提到生成数据,就想到GAN:
输入噪声,过GAN生成数据,数据过Teacher得到结果,求损失来训练GAN,使得GAN能生成和原数据集分布一致的数据,然后就可以去训student了。

什么样的loss能使得GAN生成和原数据集分布一致的数据呢?经过观察发现:
(图像先验)
1、生成图的方差小
2、生成图的L2范数小
在这里插入图片描述
因此把方差和2范数作为损失
不过这样生成的数据虽然可能复合原数据集的分布,但不一定好看
在这里插入图片描述
比如从噪声生成右图的样子
为了约束图像使其更好看,在这篇文章中作者加入了对特征的监督
作者认为图像的特征的均值、方差应和原数据集的均值、方差一致,因此用原数据集的均值、方差监督噪声输入特征的均值、方差
在这里插入图片描述
原数据集的均值、方差都在BN层里存着的
在这里插入图片描述
因此最终的损失为图像先验损失与特征的均值、方差损失:
在这里插入图片描述

图像生成任务到这里就可以基本完成了


但是上面的方法存在一个问题,就是依靠均值、方差还原出的数据可能只占原始数据集较为集中的一部分,
在这里插入图片描述
其他的数据怎么获得呢?=》使生成数据均匀地分布在超球面上
假设已经用之前生成的数据训好了一个Student网络:
在这里插入图片描述
把它fix起来,再同时过Student与Teacher网络,使得两条流的logits分布差异越大越好,用这个loss来优化输入Noise(或者是GAN),就能得到在之前的分布之外的数据
在这里插入图片描述
把新生成的数据加入之前生成的数据,就又能训Student;以此类推,不断迭代
在这里插入图片描述

最终生成的图像说实话还是不太好看
在这里插入图片描述

e是加了student和teacher的loss之后的

而且这样还原的是原数据集中的一部分图片,不能知道还原的是哪张图片,所以也没有gt。如果能知道图片输入得到的梯度就好了,那就是下一篇:
deep leakage from Gradients

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值