循环神经网络的从零开始实现|循环神经网络|动手学深度学习

40 阅读3分钟

1. 尝试说明独热编码等价于为每个对象选择不同的嵌入表示。

独热编码和嵌入表示是两种常用的向量化表示方法,它们在某些情况下可以等效地表示对象,尤其是在表示离散的类别特征时。

  1. 独热编码(One-Hot Encoding): 独热编码是一种将离散特征表示为二进制向量的方法。对于一个具有N个类别的特征,独热编码将每个类别映射为一个长度为N的二进制向量,其中只有一个元素为1,表示该类别,其余元素都为0。例如,对于一个包含三个类别的特征,可以将它们编码为[1, 0, 0]、[0, 1, 0]和[0, 0, 1]。

  2. 嵌入表示(Embedding Representation): 嵌入表示是一种将离散对象映射到连续向量空间的方法。它通过学习将每个对象(如单词、类别)映射到一个低维连续向量表示。这些向量通常在训练模型的过程中学习得到,以最大程度地保留对象之间的语义关系。例如,对于一个包含N个单词的词汇表,可以将每个单词映射为一个维度为d的向量,其中d通常远远小于词汇表的大小N。

等价性: 在某些情况下,独热编码和嵌入表示可以等效地表示对象,特别是当类别数量较少且类别之间没有内在的顺序关系时。例如,对于一个只有几个类别的离散特征,使用独热编码和嵌入表示可能会得到类似的结果。在这种情况下,独热编码可以看作是将每个对象选择为具有不同嵌入表示的一种方式。然而,在处理大型词汇表等情况下,嵌入表示通常更加高效,因为它可以将对象映射到一个连续的低维空间,同时保留对象之间的语义关系,而不需要存储大量的二进制值。

2. 通过调整超参数(如迭代周期数、隐藏单元数、小批量数据的时间步数、学习率等)来改善困惑度。

  • 困惑度可以降到多少?
  • 用可学习的嵌入表示替换独热编码,是否会带来更好的表现?
  • 如果用H.G.Wells的其他书作为数据集时效果如何, 例如世界大战

3. 修改预测函数,例如使用采样,而不是选择最有可能的下一个字符。

  • 会发生什么?
  • 调整模型使之偏向更可能的输出,例如,当α>1\alpha > 1,从q(xtxt1,,x1)P(xtxt1,,x1)αq(x_t \mid x_{t-1}, \ldots, x_1) \propto P(x_t \mid x_{t-1}, \ldots, x_1)^\alpha中采样。

4. 在不裁剪梯度的情况下运行本节中的代码会发生什么?

5. 更改顺序划分,使其不会从计算图中分离隐状态。运行时间会有变化吗?困惑度呢?

6. 用ReLU替换本节中使用的激活函数,并重复本节中的实验。我们还需要梯度裁剪吗?为什么?