返回介绍

寻找 CNN 的弱点

发布于 2025-02-25 23:04:59 字数 2342 浏览 0 评论 0 收藏 0

CNN 是现在十分火热的模型,在很多图像检索问题上,CNN 模型的效果在以往的基础上有了很大的提高,但是 CNN 毕竟没有把这些问题完全解决,CNN 还是有它自己的弱点的。这个弱点也不能算作是它独有的问题,但是由于它的效果实在太好了,很多人甚至对它产生了迷信,因此这盆冷水就泼到它身上了。

大神们看到了 CNN 模型的强大,但忍不住提出一个问题:CNN 有没有什么搞不定的地方?比方说我们用 CNN 构建了一个人脸识别的模型,在训练数据集和测试数据集上表现良好,但是会不会有一些用例是它会误判的,而且我们可以找到规律生成这些用例?

我们可以想象,如果我们对之前识别正确的数据做轻微的改动,那么它还是有可能识别正确的。于是我们就有了一个方案,我们每将图像做一点改动,就把图像传入 CNN 做一下测试,然后看看 CNN 的预测结果有没有发生改变,如果没有发生改变,我们就保存这个图像,接着我们再进行下一轮的改动,经过若干轮的改动后,我们把生成的图像输出出来看看图像会变成什么样子。

这里我们将采用 MNIST 为例,以下的就是我们的改动方案:

  1. 利用 MNIST 的训练集训练一个 CNN 的模型,我们的 CNN 模型结构是:conv32*3*3->relu->maxpool2*2->conv64*3*6->relu->maxpool2*2->fc256->dropout0.5->fc10。
  2. 找到一个训练数据,将其数据范围限定在 0 到 1 之间,我们对每一个像素点随机增减-0.1 到 0.1 之间的一个数,这样得到 64 个随机的图像,然后经过 CNN 模型预测得到这 64 个图像的预测 label,从中选择一个和原始 label 相同的图像。经过若干轮迭代后,我们就可以看看这个随机改变的数字变成了什么样子。

我们选择了一个数字 0:

经过 50 轮迭代,我们得到了这样的图像:

经过 100 轮迭代,我们得到了这样的图像:

经过 150 轮迭代,我们得到了这样的图像:

经过 200 轮迭代,我们得到了这样的图像:

到此为止,可以看出这个数字还是隐约可见,但是实际上图像已经变得模糊不清,大量的杂乱信息混入其中,已经和原始的数字完全不同。

这个套路被称作“fool CNN”,用东北话说就是忽悠。继续迭代下去,我们还能生成出更精彩的图像。当然这也只是忽悠 CNN 模型的一种办法,我们还有其他的办法来生成图像。其他的办法这里就不再介绍了。关于这种忽悠,大神们也给出了和机器学习有关的解释:

CNN 的模型说到底还是个判别式模型,如果我们把图像设为 X,label 设为 y,CNN 的模型就相当于求 p(y|X) 的值。判别式模型相当于描述“什么样的图像是这个 label 的图像”,而满足了这些条件的图像有时并不是具有真实 label 的那个图像。而上面的忽悠套路就是利用了这个漏洞。

上面的例子中,我们用这种 fool 的方法让一张模糊不清的图像保持了原来的 label,同时我们也可以让一张不算模糊的图像被 CNN 错认成另外一个 label。

比方说下面这张经过 40 轮迭代的图像被认成了 6:

这些套路的出现都让我们对 CNN 有了一些警惕,如果想让 CNN 对手写数字完全 hold 住,我们还需要其他的方法辅助,不然的话这种意外总会发生。

那么有没有什么方法能解决这样的问题呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文