假设我们有一个接受向量的 ANN,表示图像,并将其分为两类。输出是概率向量我们选择当且当. 让这两个类和. 现在想象一下,我们想通过找到这个 ANN 的理想猫的想法. 我们将如何进行?我正在考虑解决,但我不知道这是否有意义或是否可以解决。
简而言之,我如何计算最大化类概率的输入?
假设我们有一个接受向量的 ANN,表示图像,并将其分为两类。输出是概率向量我们选择当且当. 让这两个类和. 现在想象一下,我们想通过找到这个 ANN 的理想猫的想法. 我们将如何进行?我正在考虑解决,但我不知道这是否有意义或是否可以解决。
简而言之,我如何计算最大化类概率的输入?
在深度网络中,这个问题实际上有各种各样的解决方案,但如果你需要找到一个,任何简单的方法都是通过正常的优化方案
在哪里是你的损失函数。由于 ANN 通常是可微的,您可以使用某种形式的梯度下降方案迭代地优化它:
在哪里是你的学习率。
搜索最有可能是猫的图像的最简单方法可能是使用类似于 Deep Dream 的技术:
加载网络进行训练,但冻结所有网络权重
创建一个随机输入图像,并将其作为“变量”连接到网络,即可以通过训练改变的数据
根据最大化最后一层中的 pre-sigmoid 值设置损失函数(这比使用 0.999 等概率更容易处理)
使用反向传播进行训练,但不是使用梯度来改变权重,而是一直反向传播到输入层并使用梯度来改变输入图像。
通常,您还希望在迭代之间对输入图像进行归一化。
您找到的触发“最大猫性”的理想输入很有可能是与猫相关的功能非常嘈杂的混乱混乱。您可以通过添加一点运动来鼓励视觉上更吸引人的东西,或者至少减少噪音——例如,轻微的模糊,或者在每次迭代之间进行轻微的缩放(然后裁剪)。到那时,它就变成了一种艺术而非数学的尝试。
这是我使用一些 TensorFlow Deep Dream 代码加上缩放和模糊来鼓励更大规模的特征占主导地位的东西:
从技术上讲,上述方法最大化了 CNN 的单个内部特征图,而不是类概率,但在概念上是相同的。