首页 > 解决方案 > LSTM num_units 大小,即 hidden_​​layer 的大小

问题描述

我经常看到natural language processing任务的使用LSTM方式是,它们首先使用 aembedding layer后跟LSTM layer嵌入大小的 an,即如果使用 1x300 向量表示的单词LSTM(300)

例如:

model = Sequential()
model.add(Embedding(vocabulary, hidden_size, input_length=num_steps))
model.add(LSTM(hidden_size, return_sequences=True))

这样做有什么特别的原因吗?想要更好地表达含义?

标签: pythonkeraslstm

解决方案


我不认为有任何特殊原因/需要,坦率地说,我自己并没有看到很多这种情况(即使用LSTM隐藏单位 ==Embedding大小)。唯一的影响是每个嵌入向量元素都有一个存储单元(我认为这不是必需的)。

话虽如此,我想我可能会提到一些额外的东西。也就是说,Embedding在这个设置中有一个层是有原因的。事实上,这是一个很好的理由。让我们考虑两个选项,

  1. 使用一种热编码进行单词表示
  2. Embeddings用于单词表示

选项 2 比选项 1 有几个优点。

  • 当您使用嵌入层时,输入的维度要小得多(例如 300 而不是 50000)
  • 您正在为模型提供灵活性来学习实际上适合您解决的任务的单词表示。换句话说,您并没有限制单词的表示在训练过程中保持不变。
  • 如果您使用预训练的词嵌入层来初始化该Embedding层,那就更好了。您正在将单词语义带入您正在解决的任务中。这总是有助于更好地解决任务。这类似于要求一个不理解单词含义的幼儿做与文本相关的事情(例如以正确的语法顺序排​​列单词)与要求一个 3 岁的孩子做同样的任务。他们俩最终都可能做到这一点。但是一个人会做得更快更好。

推荐阅读