从回归神经网络到生成神经网络

数据挖掘 神经网络 回归 喀拉斯 rnn 文本生成
2021-10-13 13:37:12

我制作了一个带有词嵌入、RNN 和一些密集层的神经网络,以根据游戏标题预测计算机游戏评论的得分。我在 Python 中使用了 Keras。我想知道是否有可能以某种方式将我的模型转换为生成模型,从而生成具有高(或低)预测分数的标题。可以通过我的网络进行暴力破解并运行所有组合,但也许有更智能的解决方案。

1个回答

有不止一种类型的生成网络。但是,我不知道有一种通用方法可以采用经过训练的基于 RNN 的网络并基本上向后运行它以对预期产生给定输出的输入进行采样。因此,我提出了一些我见过的有效的生成方法,但这需要你构建和训练一个新的网络。

您可以引入一些关于学习回归模型的典型网络大小的知识,但您不能 AFAIK 直接重用回归模型并以某种方式反转它。

一个警告:虽然我对这两种类型的生成网络都进行了简单的研究,但我从未构建过一个以期望目标为条件的生成网络,就像你想要使用的那样。


使用纯粹基于 RNN 的方法,您可以通过让您的网络预测标题中的下一个字母/单词 - 分类器 - 同时获取到目前为止的标题(或其中的 X 个字符/单词)和评级(标准化)作为输入。

然后,一旦经过训练,您就可以从 RNN 中随机采样以生成新​​字符串。这是例如 Karpathy 在他现在著名的博客“循环神经网络的不合理有效性”中使用的技术。有许多此类序列采样生成器的示例可供研究。

您还可以获取此类模型的输出,看看它是否与您之前的回归模型匹配。但是我认为如果不这样做,您将无能为力,除非如果生成的标题不符合预期,则可能会过滤掉它们 - 例如,生成许多预期评级为 10 的标题,并且仅在您的初始模型也显示时显示一个同意接近 10 分。

我能找到的最相关的 Keras 示例是lstm_text_generation.py


基于 RNN 的生成对抗网络 (GAN)也可能能够实现您想要的。但是,请注意,GAN 的训练是出了名的繁琐。

一个 GAN 实际上是 2 个网络。您创建一个鉴别器和一个生成器并并行训练它们。生成器采用一个小的完全随机向量(例如,从 N(0,1) 中采样的 10 个数字),加上您想要达到的评级。然后它生成一个文本序列输出。鉴别器将接受一个文本输入和一个评级,如果它是真实的,则输出 1,如果它是假的,则输出 0。您将真实的训练数据或生成器的输出呈现给鉴别器,并使用它们来训练它。你根据它是否欺骗鉴别器来训练生成器。

棘手的部分是保持这两个部分之间的平衡——如果其中一个变得相对于另一个来说太好,训练就会停滞不前。

但是,如果你能让它工作,你将拥有一个真正的生成模型,它从人口空间(你输入的噪声向量)中采样,加上以评级为条件。

我能找到的最相关的 Keras 示例是mnist_acgan.py,它生成一个图像,而不是文本序列,但希望应该开始。