假设:
输入(中文): "我有一本书"
目标(英文): "I have a book"
一,训练阶段:
在 训练阶段,我们希望训练模型从源语言(中文)生成目标语言(英文)。在这个过程中,解码器依赖于编码器的输出,并通过与目标序列进行比较来计算损失,并优化模型参数。
# 1. 输入序列(中文):
输入句子为中文 “我有一本书”,它将作为 编码器 的输入,生成一个上下文相关的隐状态表示。
# 2. 输入嵌入(Input Embedding):
输入的中文词汇(“我”,“有”,“一本”,“书”)通过 输入嵌入 转换为向量,传递给 编码器:
“我” → [向量1]
“有” → [向量2]
“一本” → [向量3]
“书” → [向量4]
# 3. 编码器处理输入:
编码器接收到输入的词向量,并通过一系列自注意力(SelfAttention)和前馈网络(FeedForward)处理,生成上下文相关的隐状态表示:
编码器的输出:隐状态序列 [H1, H2, H3, H4],这些隐状态表示了输入句子中每个词的上下文信息。
# 4. 目标序列右移(Shifted Right):
在训练过程中,我们将目标序列 “I have a book” 进行右移,得到:
右移后的目标序列:[空] I have a book
这使得解码器能够在生成每个词时,只依赖于前面已生成的词(而不是后面的词)。
# 5. 解码器生成输出:
解码器接收到右移后的目标序列,并根据 编码器的隐状态序列 来生成预测输出。在每个时间步,解码器会根据前一个时间步的输出序列(而不是单独的词)生成下一个词。
## 第1步:
输入:[空](<start>标记)+ 编码器的隐状态 [H1, H2, H3, H4]
输出:解码器生成 “I”
## 第2步:
输入:“I” + 编码器的隐状态 [H1, H2, H3, H4]
输出:解码器生成 “have”
## 第3步:
输入:“I have” + 编码器的隐状态 [H1, H2, H3, H4]
输出:解码器生成 “a”
## 第4步:
输入:“I have a” + 编码器的隐状态 [H1, H2, H3, H4]
输出:解码器生成 “book”
# 6. 计算损失(交叉熵损失):
在训练时,每个时间步都会计算 交叉熵损失,比较解码器的输出与真实目标序列的对应词。每个时间步的损失通过交叉熵计算,衡量模型生成的词与目标词的差异。
在第1步,计算 “I” 和目标 “I” 的交叉熵损失。
在第2步,计算 “have” 和目标 “have” 的交叉熵损失。
在第3步,计算 “a” 和目标 “a” 的交叉熵损失。
在第4步,计算 “book” 和目标 “book” 的交叉熵损失。
损失的累加:所有时间步的损失会被累加起来(通常是取平均),得到总损失。总损失将通过 反向传播 来计算梯度并更新模型的参数。
# 7. 反向传播与优化:
通过反向传播算法计算梯度,并使用优化算法(如Adam)来更新模型的权重。通过多次迭代训练,模型逐渐优化,能够更好地从输入序列生成目标序列。
# 8. 重复训练:
整个过程在训练数据上重复进行,模型通过反向传播不断优化参数,使其能够准确地从输入句子生成目标句子。
二,推理阶段(生成阶段):
在 推理阶段,模型已经训练完成,此时我们使用训练好的模型进行实际的预测。不同于训练阶段,推理阶段并没有目标序列的右移,我们通过 逐步生成 目标序列中的词。
# 1. 输入序列(中文):
输入为中文句子 “我有一本书”。
# 2. 输入嵌入(Input Embedding):
输入句子通过输入嵌入转换为向量,并传入编码器。
# 3. 编码器的处理:
编码器生成上下文相关的隐状态 [H1, H2, H3, H4]。
# 4. 解码器的生成过程:
第1步:解码器从 [空](<start>标记)开始生成,基于编码器的隐状态序列生成第一个词 “I”。
第2步:解码器将 “I” 作为输入,继续生成下一个词 “have”。
第3步:解码器将 “I have” 作为输入,生成 “a”。
第4步:解码器将 “I have a” 作为输入,生成 “book”。
每一步的生成都依赖于前一步的输出。
# 5. 生成结束:
生成过程会在遇到 结束符号(<end>)时停止,或者当解码器生成完所有目标词时结束。生成的句子就是模型的最终输出。
推理阶段的关键区别:
在推理阶段,解码器生成的每个词都会作为输入传递给下一个时间步,这样模型可以逐步生成整个输出序列。
与训练阶段不同,推理时我们没有目标序列的右移,只有模型自己生成的输出。
三,训练阶段和推理阶段总结:
# 训练阶段:
1. 输入中文句子(如“我有一本书”)通过编码器生成隐状态。
2. 目标序列(如“I have a book”)右移,作为解码器的输入。
3. 解码器生成输出,通过与真实目标的比较,计算交叉熵损失。
4. 反向传播更新参数,逐步优化模型。
# 推理阶段:
1. 输入中文句子通过编码器生成隐状态。
2. 解码器从 [空](<start>)开始生成输出,并逐步生成目标语言的每个词。
3. 生成的输出会逐步作为下一时刻的输入,直到生成完毕。
这样,我将 训练阶段 和 推理阶段 的全过程做了一个完整的整合。希望这能帮助你更好地理解整个过程!如果有更多问题,随时欢迎提问。
标签:输出,编码器,姑且,参考,生成,解码器,序列,幻觉,输入 From: https://www.cnblogs.com/augustone/p/18682510