当训练时,将使用另一个RNN尝试通过使用这个“思想向量”作为初始化状态获取一个单词,并从每个时间戳的解码器输入获取输入。解码器从特殊指令“_GO”开始。在执行一步之后,新的隐藏状态将与新输入一起获得,我们可以继续此过程,直到我们达到特殊指令“_END”。我们可以通过计算对数和目标标签的交叉熵损失来计算损失。logits是通过隐藏状态的投影层(对于解码器步骤的输出,在GRU中,我们可以仅使用来自解码器的隐藏状态作为输出)。 当测试时,没有标签。所以我们应该提供我们从以前的时间戳获得的输出,并继续进程直到我们到达“_END”指令。 五、注意事项: 这里我使用两种词汇。 一个是由编码器使用的单词; 另一个是用于解码器的标签。 对于词汇表,插入三个特殊指令:“_ GO”,“_ END”,“_ PAD”; “_UNK”不被使用,因为所有标签都是预先定义的。 10. Transformer(“Attention Is All You Need”) 状态:完成主要部分,能够在任务中产生序列的相反顺序。你可以通过在模型中运行测试功能来检查它。然而,我还没有在实际任务中获得有用的结果。我们在模型中也使用并行的style.layer规范化、残余连接和掩码。 对于每个构建块,我们在下面的每个文件中包含测试函数,我们已经成功测试了每个小块。 带注意的序列到序列是解决序列生成问题的典型模型,如翻译、对话系统。大多数时候,它使用RNN完成这些任务。直到最近,人们也应用卷积神经网络进行序列顺序问题。但是,Transformer,它仅仅依靠注意机制执行这些任务,是快速的、实现新的最先进的结果。 它还有两个主要部分:编码器和解码器。看以下文章: 编码器: 共6层,每个层都有两个子层。第一是多向自我注意机制;第二个是位置的全连接前馈网络。对于每个子层使用LayerNorm(x + Sublayer(x)),维度= 512。 解码器: 1.解码器由N = 6个相同层的堆叠组成。 2.除了每个编码器层中的两个子层之外,解码器插入第三子层,其在编码器堆栈的输出上执行多向注意。 3.与编码器类似,我们采用围绕每个子层的残余连接,然后进行层归一化。我们还修改解码器堆栈中的自我注意子层,以防止位置参与到后续位置。这种掩蔽与输出嵌入偏移一个位置的事实相结合确保了位置i的预测只能取决于位于小于i的位置的已知输出。 主要从这个模型中脱颖而出: 1.多向自我注意:使用自我注意,线性变换多次获取关键值的投影,然后开始注意机制 2.一些提高性能的技巧(剩余连接、位置编码、前馈、标签平滑、掩码以忽略我们想忽略的事情)。 有关模型的详细信息,请查看:a2_transformer.py 11.循环实体网络(Recurrent Entity Network) 输入: 1.故事:它是多句话,作为上下文。 2.问题:一个句子,这是一个问题。 3. 回答:一个单一的标签。 型号结构: 1.输入编码:使用一个词来编码故事(上下文)和查询(问题);通过使用位置掩码将位置考虑在内。 通过使用双向rnn编码故事和查询,性能从0.392提高到0.398,增长了1.5%。 2.动态记忆: a. 通过使用键的“相似性”,输入故事的值来计算门控。 b. 通过转换每个键,值和输入来获取候选隐藏状态。 c. 组合门和候选隐藏状态来更新当前的隐藏状态。 3. 输出(使用注意机制): a. 通过计算查询和隐藏状态的“相似性”来获得可能性分布。 b. 使用可能性分布获得隐藏状态的加权和。 c. 查询和隐藏状态的非线性变换获得预测标签。 这个模型的关键点: 1.使用彼此独立的键和值块,可以并行运行。 2.上下文和问题一起建模。使用记忆来追踪世界的状态,并使用隐性状态和问题(查询)的非线性变换进行预测。 3.简单的型号也可以实现非常好的性能。简单的编码作为词的使用包。 有关模型的详细信息,请查看:a3_entity_network.py 在这个模型下,它包含一个测试函数,它要求这个模型计算故事(上下文)和查询(问题)的数字,但故事的权重小于查询。 12.动态记忆网络 模块:Outlook 1.输入模块:将原始文本编码为向量表示。 2.问题模块:将问题编码为向量表示。 3.独特的记忆模块:通过输入,通过注意机制选择哪些部分输入、将问题和以前的记忆考虑在内====>它将产生“记忆”向量。 4.答案模块:从最终的记忆向量生成答案。 详情: 1.输入模块: 一个句子:使用gru获取隐藏状态b.list的句子:使用gru获取每个句子的隐藏状态。例如 [隐藏状态1,隐藏状态2,隐藏状态...,隐藏状态n]。 2.问题模块:使用gru获取隐藏状态。 3.记忆模块: 使用注意机制和循环网络来更新其记忆。 (责任编辑:本港台直播) |