前面图解了Transformer整体架构,今天图解编码器。
先来个整体视角:
再逐步分解开来:
1️⃣ 𝗪𝗛𝗔𝗧'𝗦 𝗧𝗛𝗘 𝗘𝗡𝗖𝗢𝗗𝗘𝗥? 🧠
编码器负责通过自注意力机制和前馈层处理输入的 token,从而生成具有上下文感知的表示。
👉 它是 NLP 模型中理解序列的核心动力。
𝗦𝗧𝗘𝗣 1.1: 𝗜𝗡𝗣𝗨𝗧 𝗘𝗠𝗕𝗘𝗗𝗗𝗜𝗡𝗚🔎
编码器的第一步是将每个输入的单词嵌入为一个大小为 512 的向量。
⚠️ 这种嵌入过程只发生在最底层的编码器中。
可以把它想象成把单词翻译成模型能够理解的语言!🌐
𝗦𝗧𝗘𝗣 1.2: 𝗣𝗢𝗦𝗜𝗧𝗜𝗢𝗡𝗔𝗟 𝗘𝗡𝗖𝗢𝗗𝗜𝗡𝗚🧭
Transformer 缺乏循环结构,因此它们使用位置编码来表示 token 的位置。
怎么实现的?
通过正弦和余弦函数的组合,模型能够理解句子中单词的顺序!📏
𝗦𝗧𝗘𝗣 2: 𝗦𝗧𝗔𝗖𝗞 𝗢𝗙 𝗘𝗡𝗖𝗢𝗗𝗘𝗥 𝗟𝗔𝗬𝗘𝗥𝗦 🏗️
编码器是层叠的,每一层都会接收前一层的输入,并通过多轮自注意力机制和前馈层进一步优化输入。
这有助于更好地理解输入的上下文!
𝗦𝗧𝗘𝗣 2.1: 𝗠𝗨𝗟𝗧𝗜-𝗛𝗘𝗔𝗗𝗘𝗗 𝗦𝗘𝗟𝗙-𝗔𝗧𝗧𝗘𝗡𝗧𝗜𝗢𝗡 🔗
自注意力机制让模型能够将输入中的每个词与其他词相互关联。
注意力得分基于以下三个部分:
查询(Query)
键(Key)
值(Value)
这个过程会重复多次,以便从多个角度进行理解!👀
𝗦𝗧𝗘𝗣 2.2: 𝗠𝗔𝗧𝗥𝗜𝗫 𝗠𝗨𝗟𝗧𝗜𝗣𝗟𝗜𝗖𝗔𝗧𝗜𝗢𝗡 🔢
通过将查询(Query)和键(Key)向量相乘,给每对单词分配一个得分。
这为序列中的每个词分配了一个相对的重要性得分,类似于根据词与词之间的相关性对它们进行排序!
𝗦𝗧𝗘𝗣 2.3: 𝗦𝗖𝗔𝗟𝗜𝗡𝗚 𝗧𝗛𝗘 𝗔𝗧𝗧𝗘𝗡𝗧𝗜𝗢𝗡 𝗦𝗖𝗢𝗥𝗘𝗦 📈
这些得分会通过除以查询(Query)和键(Key)向量维度的平方根进行缩放,以确保梯度的稳定性。
这样可以防止较大的值对结果产生偏差。📊
𝗦𝗧𝗘𝗣 2.4: 𝗔𝗣𝗣𝗟𝗬𝗜𝗡𝗚 𝗦𝗢𝗙𝗧𝗠𝗔𝗫 🔀
应用 softmax 函数以获得注意力权重,强调重要的单词,同时减弱不太相关的单词。
这有助于集中注意力于输入的关键部分!🔍
𝗦𝗧𝗘𝗣 2.5: 𝗖𝗢𝗠𝗕𝗜𝗡𝗜𝗡𝗚 𝗦𝗢𝗙𝗧𝗠𝗔𝗫 𝗥𝗘𝗦𝗨𝗟𝗧𝗦 🍹
注意力权重与值(Value)向量相乘,生成的输出是值的加权和。
这样就将上下文信息整合到了输出表示中!🎯
𝗦𝗧𝗘𝗣 2.6: 𝗡𝗢𝗥𝗠𝗔𝗟𝗜𝗭𝗔𝗧𝗜𝗢𝗡 𝗔𝗡𝗗 𝗥𝗘𝗦𝗜𝗗𝗨𝗔𝗟𝗦 🔄
编码器中的每个子层之后都会有一个归一化步骤和残差连接。
这样可以帮助缓解梯度消失问题,并确保模型在计算过程中保持平衡,为下一步做好准备!⚖️
𝗦𝗧𝗘𝗣 2.7: 𝗙𝗘𝗘𝗗-𝗙𝗢𝗥𝗪𝗔𝗥𝗗 𝗡𝗘𝗨𝗥𝗔𝗟 𝗡𝗘𝗧𝗪𝗢𝗥𝗞 🧠
归一化之后,前馈网络会处理输出,对上下文进行进一步的精细化调整。
这是在将信息发送到下一层之前的最后一步!🚀
𝗦𝗧𝗘𝗣 3: 𝗢𝗨𝗧𝗣𝗨𝗧 🎯
编码器的最终输出是一组向量,每个向量都捕捉了输入序列的丰富上下文理解。
这些输出已准备好被解码,并用于各种 NLP 任务!🎉