Closed Lyan-ing closed 6 months ago
这里是因为后来Likelihood Maximization进行了升级,效果更好了,时间复杂度也更低,因此与paper中不一样(这点我会在后续的blog or paper中说明)。
另外L2_clamp其实没啥用,因为iter_step=5的情况下,L2距离本身就很近,这个clamp的范围就完全到不了。
你好,我也想请教一下这个问题
defenses/PurificationDefenses/DiffPure/LikelihoodMaximization/EDMLM.py
中likelihood_maximization_T1
这个函数的改进之处主要是在于用了Adam optimizer吗?
同时,以下代码相当于每张image只每次只对一个time_step来进行Likelihood Maximization的计算,这样降低时间复杂度对效果有什么影响呢?
epsilon = torch.randn_like(ori_x)
noised = x + t.view(-1, 1, 1, 1) * epsilon
denoised = self.dc.unet(noised, t)
你好,我也想请教一下这个问题
defenses/PurificationDefenses/DiffPure/LikelihoodMaximization/EDMLM.py
中likelihood_maximization_T1
这个函数的改进之处主要是在于用了Adam optimizer吗?同时,以下代码相当于每张image只每次只对一个time_step来进行Likelihood Maximization的计算,这样降低时间复杂度对效果有什么影响呢?
epsilon = torch.randn_like(ori_x) noised = x + t.view(-1, 1, 1, 1) * epsilon denoised = self.dc.unet(noised, t)
@MisterPANDC 非常抱歉刚刚看到您的消息。非常建议您如果不是开新的issue,而是在别人的issue下提新的问题的话,最好@我,否则我是没有邮件提醒的,就很容易看不到。
我们的likelihood maximization有2个版本。一个是2023年5月arxiv版本。当时每次算loss是算T个timestep的全部loss。优化器使用的是MI-FGSM。这样做的时间复杂度是O(NT),因为每次算loss需要O(T),总共优化N次。
在ICLR版本中,我们修改了likelihood maximization。现在每次算loss是算1个timestep,因此时间复杂度是O(N),速度非常快, 远远快于diffpure。
另外这样做似乎也有鲁棒性的提升,这一点在ICLR版本的第21页有解释:
在运行RDCN+TK.py代码时,看到Likelihood maximization更新x时使用的似乎是L2_clamp,与paper中的似乎不同,参数设置也不太一样。不知您是否方便在readme中给出比较详细的解释,谢谢