机器眼中的猫长什么样

这是一篇鸽了快一年,我甚至已经找不到之前写了一半的草稿的更新。上篇:《机器为什么知道猫是猫》。

精 神 污 染 警 告 !!!

精 神 污 染 警 告 !!!

精 神 污 染 警 告 !!!

上图是Google开发的一个叫DeepDream[1]的项目生成的图像(容我称其为阴间玩意儿)。虽然现在已经过去了几个年头,不过当时刚出的时候倒是火了一把。这个名字取得很奇妙,人工智能会梦见电子狗吗?——会,而且还很掉san!

其实这个项目是为了理解,神经网络究竟是如何理解图片的。以DeepDream为例,我们训练出了一个分类器,可以把各种动物区别开,那么我们如何知道,机器眼中的猫长什么样呢?一种办法是:比如说你想要知道是怎样的图片会导致分类结果出现香蕉,那么你可以从一张充满了随机噪点的图片入手,逐渐调整图片朝着神经网络认定其为香蕉的方向变化。于是会出现类似这样的结果:

当然,聪明的读者们也一定记得我们曾经讲过模型是很容易被欺骗的(见《AI模型的攻击和防御》),即使是一些看起来完全随机的图片,AI也可能给出非常肯定的判定结果。所以只是像上面那样做是不够的,还需要加上一些让图片内容看起来像是真实图片的限制,比如相邻的像素要有一定相关性等,加上那些限制后我们就可以从图片中看出一些香蕉的影子了。当然你还可以用其他类别生成更多的精污图:

这个系列的照片真的太精污了,我必须强调这是很早期的研究效果了!怪我这篇拖了太久!

聪明的读者们一定可以想到现在完全可以利用GAN来创造更好的结果,见《为什么神经网络可以创造未存在过的人脸》。换句话说,上面的做法只是通过判别网络来调整图片,我们是否可以直接训练一个图片生成器,使其生成的结果也会被判定为对应的类别呢?这个图片生成器可以是GAN也可以是VAE,具体结构和原理上文都有提到,于是在这篇不再赘述,感兴趣的读者们可以再去复习一下~

分类模型是根据一张图片X得到其分类标签y,而图片生成器是根据一个随机向量z生成一张图片X。于是在我们这个任务中,就变成了我们要寻找一个随机向量z,使其生成的图片可以被分类为y。这个做法其实就是把上面对图片的约束进一步收紧:你必须是由真实图片训练得出的、能合成较为真实的图片的图片生成器生成的图片(有点绕XD)。相应的结果[3]也好很多:

不过我个人认为,这个更接近于“用分类器生成对应类别的图片”了。我觉得在人工智能的梦中,狗还是长题图这样的吧。

Reference:

[1] https://ai.googleblog.com/2015/06/inceptionism-going-deeper-into-neural.html

[2] https://www.youtube.com/watch?v=yORbWn7UsBs&list=PLJV_el3uVTsOK_ZK5L0Iv_EQoL1JefRL4&index=20

[3] https://arxiv.org/abs/1612.00005

2 评论

    • z是随机生成的,你每随机一张就可以生成一个新的,一般来说网络收敛以后生成的结果应该都不会太差。当然你想要特别好的结果也可以随机生成十张再选最好的一张。例如openAI最新出的DALL·E(https://openai.com/blog/dall-e/)在生成结果中使用CLIP进行打分并排序,选出结果最好的几张作为最终结果。这个技术也很有意思,有空我想也写一下。

此方进行回复取消回复