以往深度学习模型训练测试大多都是在别人的模型上稍微修改便拿来用,本周开始自己从头构建模型代码进行训练,注意到了很多之前没有注意的实现细节。本周的主要工作有以下两点
- 阅读论文 Explaining and harnessing adversarial examples 学习了对抗样本的相关知识
- 继续学习 GAN 的相关知识
1 对抗样本
对抗样本一直是机器学习中一个难题,刻意地在样本中加入特定扰动便能大大降低模型的识别准确率,如下图所示,便能使网络将熊猫识别为长臂猿。
制造对抗样本的方法中最有名的方法之一便是上图中使用的 FGSA(fast gradient sign attack)。一直以来大家都知道对抗样本问题的存在,但是对于引起这种现象的原因却并不明了。现在业界对此的共识是输入特征维度过高和模型的线性性质导致 。只要找到特定的方向,图像的每个像素点都朝特定的方向前进一小步,就会导致整个图片的特征发生很大的改变从而跨过决策层。
1.1 对抗样本的防御
目前对抗样本的生成远比防御更加容易,大多对抗样本的生成都是利用了其梯度信息。最容易想到的防御方法便是将生成的对抗样本一块儿加入训练集中进行训练,这种方法可以有效地防御样本攻击,但是只能针对用于训练的对抗样本有效,除此之外还有defensive distillation ,梯度隐藏 等方法。但相比攻击来说,防御并没有做得足够好。
1.2 总结
对抗样本的出现对理解深度学习有很大的帮助,在很多领域深度学习识别率都大大超越了人类水平,但对抗样本的出现算是找到了深度学习的一处盲点,目前还没有很好的方法完全解决这一问题。
1.3 参考资料
2 GAN
2.1 实践部分
本周继续学习了GAN的相关知识,在参考了许多经典模型之后开始自己动手编写模型。在自己编写模型的过程中注意到了很多之前忽视的实现上的细节知识,加强了对深度学习框架的熟悉程度。
自己实现模型需要关注的东西更多,从数据的读取,预处理,到网络的构建,优化器的选择,训练,测试的过程。比起在已有的代码中更改网络模型进行训练,手动实现整个过程有助于观察到更多的细节部分。之前已经跑过相应的代码,目前自己从头编写的代码仅实现了一部分,还未全部完成。
2.2 理论部分
GAN的相关理论发展主要在对真实样本与生成样本之间分布的测量部分,Goodfellow最开始论文中使用的是 JS-divergence 来度量分布之间的距离。但这种距离的测量不是很容易,而且两个分布在没有任何交集的情况下距离都相同,也就是距离的远近不影响测量值,这样不利于训练。
在这之后逐渐提出了很多种不同的度量方式,如 f-GAN中便进行了推广,利提出了多种不同的测量方式如下
随后在W-GAN中又提出了新的测量方式 Earth Mover’s distance 更好得解决了两个分布无任何交集情况下得距离问题,其中的理论知识都挺复杂,一时半会很难搞懂。