Encoder Deep Dive
Last updated
Last updated
编码器的输入是一个序列,比如一句话:"I love machine learning." 它会被拆分成一个个单词或子单词(token): 这些 token 会被转换为向量表示(embedding),即:
编码器的核心是一个RNN(或 LSTM、GRU)。 它按照时间步 ( t ) 依次读取输入,并维护一个隐藏状态(hidden state):
其中:
:第 个时间步的隐藏状态(可以看作“记忆”)
:第 个时间步的输入(即当前单词的向量表示)
:上一个时间步的隐藏状态(携带了前面单词的信息)
:一个 RNN 变换函数,比如 LSTM、GRU 等
直观理解:
每次编码器处理一个输入单词 时,它结合了之前的信息 ,然后更新自己的记忆状态 。
这里的x是一个单词,而h是一整段话
最终,编码器把整个输入序列的信息压缩到最后一个隐藏状态 ,用来代表整句话的意义。
直观理解:
你把一整句话输入编码器,它会一步步处理,每个步骤都会更新记忆状态。
这个信息向量接下来可以传递给 解码器(Decoder),用于生成翻译、摘要等任务。
双向(Bidirectional)编码器 解决了这个问题。 它的隐藏状态不仅依赖于前一个单词,还会看后面的单词:
直观理解:
例如,在翻译句子 "He is ..." 时,单向编码器只能看到 "He is",但不知道后面要说什么。
双向编码器 能同时看到 "He is" 和 后面的词,从而更好地理解上下文。
编码器(Encoder) 处理输入序列,并将信息存储到隐藏状态(hidden state)。
最终隐藏状态(context vector) 可以看作是整个输入序列的“总结”。
单向编码器 只利用过去的信息,而双向编码器 还能利用未来的信息,从而更全面地理解句子。
编码器的最终隐藏状态 叫做 context vector,它是整个输入序列的信息摘要:
在最简单的情况下, 只是直接取最后的隐藏状态 ,用于后续解码(Decoder)。
最终,编码器会输出一个总结性的信息向量(上下文向量 ),这个向量包含了整个句子的主要信息。
传统的 RNN 是单向的,即它只能从前往后读取输入。因此,它的隐藏状态 只能依赖于之前的单词,无法看到后面的单词。