生成网络 课前测验 循环神经网络(RNN)及其门控单元变体,如长短期记忆单元(LSTM)和门控循环单元(GRU),提供了一种语言建模机制,可以学习词序并为序列中的下一个词提供预测。这使得我们可以使用RNN进行生成任务,例如普通文本生成、机器翻译甚至图像描述。 ✅ 思考一下你曾经从文本补全等生成任务中受益的情况。研究一下你最喜欢的应用程序,看看它们是否利用了RNN。 在我们之前讨论的RNN架构中,每个RNN单元都会输出下一个隐藏状态。然而,我们还可以在每个递归单元中添加另一个输出,这将允许我们输出一个序列(与原始序列长度相同)。此外,我们可以使用不接受输入的RNN单元,仅接受一些初始状态向量,然后产生一系列输出。
循环神经网络(RNN)及其门控单元变体,如长短期记忆单元(LSTM)和门控循环单元(GRU),提供了一种语言建模机制,可以学习词序并为序列中的下一个词提供预测。这使得我们可以使用RNN进行生成任务,例如普通文本生成、机器翻译甚至图像描述。
✅ 思考一下你曾经从文本补全等生成任务中受益的情况。研究一下你最喜欢的应用程序,看看它们是否利用了RNN。
在我们之前讨论的RNN架构中,每个RNN单元都会输出下一个隐藏状态。然而,我们还可以在每个递归单元中添加另一个输出,这将允许我们输出一个序列(与原始序列长度相同)。此外,我们可以使用不接受输入的RNN单元,仅接受一些初始状态向量,然后产生一系列输出。
这允许不同的神经架构,如下图所示:

图片来自文章《循环神经网络的不合理有效性》Unreasonable Effectiveness of Recurrent Neural Networks,作者:Andrej Karpaty
在本单元中,我们将专注于简单的生成模型,帮助我们生成文本。为了简单起见,我们将使用字符级分词。
我们将逐步训练这个RNN来生成文本。在每一步,我们将取一个长度为nchars的字符序列,并要求网络为每个输入字符生成下一个输出字符:

在生成文本时(在推理过程中),我们从一些提示开始,将其通过RNN单元生成中间状态,然后从这个状态开始生成。我们一次生成一个字符,并将状态和生成的字符传递给另一个RNN单元以生成下一个字符,直到生成足够多的字符。
图片由作者提供
继续在以下笔记本中学习:
每个RNN单元的输出是一个字符的概率分布。如果我们总是选择概率最高的字符作为生成文本中的下一个字符,文本经常会在这几个相同的字符序列之间循环,就像下面的例子:
today of the second the company and a second the company ...
然而,如果查看下一个字符的概率分布,可能会发现几个最高概率之间的差距并不大,例如一个字符的概率为0.2,另一个为0.19等。例如,在序列'play'中,下一个字符可以是空格,也可以是e(如在单词player中)。
这使我们得出结论,总是选择概率较高的字符并不总是“公平”的,因为选择次高概率的字符仍可能导致有意义的文本。更明智的做法是从网络输出的概率分布中采样字符。我们还可以使用一个参数——温度,它会在我们希望增加更多随机性时使概率分布更加平坦,或者在我们希望更多地坚持最高概率字符时使概率分布更加陡峭。
探索如何在上面链接的笔记本中实现这种软文本生成。
虽然文本生成本身可能是有用的,但主要的好处来自于能够从一些初始特征向量使用RNN生成文本。例如,文本生成被用作机器翻译的一部分(在这种情况下,编码器的状态向量用于生成或解码翻译的消息),或者生成图像的文字描述(在这种情况下,特征向量来自CNN提取器)。
在Microsoft Learn上学习一些关于此主题的课程
这里有一些扩展知识的文章
我们已经看到了如何逐字符生成文本。在实验中,你将探索基于词的文本生成。
声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。