使用学习的人工神经网络来解决输入问题

时间:2014-12-28 05:22:43

标签: neural-network

我最近一直在深入研究人工神经网络,包括进化和训练。我有一个问题,如果有什么方法可以解决导致目标输出集的输入。这有名字吗?我试图寻找的所有东西都让我反向传播,这不一定是我需要的。在我的搜索中,我最接近表达我的问题的是

  

Is it possible to run a neural network in reverse?

其中告诉我,确实存在许多解决方案,这些解决方案对于具有不同数量的节点数量的网络而言,它们并不容易解决。我的想法是使用在学习过程中建立的权重向一组理想的输入方向前进。有没有其他人有这样的经历?

为了详细说明: 假设您的网络具有401个输入节点,表示20x20灰度图像和偏差,两个隐藏层由100 + 25个节点组成,以及6个输出节点表示分类(符号,罗马数字等)。 在训练神经网络以便它可以用可接受的错误进行分类之后,我想向后运行网络。这意味着我会在输出中输入我想要看到的分类,并且网络会想象一组输入会产生预期的输出。因此,对于罗马数字示例,这可能意味着我会要求它为符号“X”反向运行网络,并且它将生成一个类似于网络认为“X”的图像。通过这种方式,我可以很好地了解它为分离分类所学到的功能。我觉得理解人工神经网络在宏观方案中如何运作和学习是非常有益的。

3 个答案:

答案 0 :(得分:3)

对于简单的前馈完全连接的NN,可以通过取反激活函数(例如,用于sigmoid单位的Logit)将隐藏单元激活投影到像素空间中,将其除以输入权重的总和,然后乘以每个像素的重量值。这将提供由这个隐藏单元识别的平均模式的可视化。总结每个隐藏单元的这些模式将产生平均模式,这对应于这组特定的隐藏单元活动。原则上,程序可以应用于将输出激活投影到隐藏的单元活动模式中。

这对于分析NN在图像识别中学到的特征确实很有用。对于更复杂的方法,您可以查看this paper(除了包含NN可以学习的模式示例的所有内容)。

你不能完全反向运行NN,因为它不记得源图像中的所有信息 - 只记得它学会检测的模式。因此网络无法想象一组输入"。然而,可以对概率分布进行采样(将权重作为每个像素的激活概率)并产生可由特定神经元识别的一组模式。

答案 1 :(得分:2)

是的,您可以反向运行概率NN,以使其“想象”#39;输入将匹配已经过训练分类的输出。

我强烈推荐Geoffrey Hinton关于NN的课程: https://www.coursera.org/course/neuralnets

他在他的介绍性视频中展示了NN想象的各种各样的" 2,它会认识到已经训练过识别0到9的数字。它非常令人印象深刻!

我认为它基本上完全符合你的目标。

Gruff的

答案 2 :(得分:2)

我知道你可以,我现在正在研究解决方案。我在我的github here上有一些代码用于想象神经网络的输入,该神经网络对MNIST数据集的手写数字进行分类,但我不认为它是完全正确的。现在,我只需要一个训练有素的网络和我想要的输出,然后向后乘以每层的学习权重,直到我得到一个输入值。这是跳过激活功能,可能有一些其他错误,但我得到了相当合理的图像。例如,这是受过训练的网络想象3:number 3

的结果