transformers的总体简述
下方的图片中的例子是将“let’s go”翻译称为西班牙语,下面的图片来自StatQuest
词嵌入(word embedding)
词嵌入(word embedding)是自然语言处理(NLP)领域的一种技术,它将单词映射到高维向量空间中的数学表示形式
因为transformers是一种神经网络,而神经网络通常只能接受数字作为输入值,所以找到一种方法将输入和输出的单词转换成数字。最常用的方法之一叫做词嵌入。
位置嵌入(position embeddings)
除了词嵌入之外,Transformers 还引入了位置嵌入(position embeddings),这是为了保留序列中词汇的位置信息,因为传统的注意力机制本身并不携带位置信息。位置嵌入可以是预先定义的(如正弦波函数生成的位置向量),也可以是训练过程中学习得到的。
个人理解是在词嵌入之后,因为单词所在的位置会导致语义的不同,所以引用位置嵌入来解决这个问题。
举个例子:
“我喜欢吃苹果。”
“苹果我喜欢吃。”
在这两个句子中,“苹果”、“喜欢”、“吃”这三个词都出现了,但是它们的顺序不同。第一个句子表达的是一个人喜欢吃苹果,而第二个句子虽然字面上也是这个意思,但在中文中,第二个句子的结构不太常见,可能不是最自然的表达方式。
自注意力机制(Self-Attention Mechanism)
自注意力机制(Self-Attention Mechanism)是 Transformers 模型的核心组成部分之一,它允许模型在处理序列数据时关注到输入序列的不同部分。
主要作用是词与词之间关系的追踪
很明显上面的it是强调pizza
再举个例子:
句子:“我喜欢在晚上阅读。”
分析:翻译时,我们需要理解“喜欢”是主语的动作,“在晚上”是时间状语,“阅读”是喜欢做的事情。如果不考虑这些关系,直接翻译可能会导致语法错误或意思模糊。
我现在的理解是生成Query和key值,用let's的query值与本身的key值点积,用let's的query值与go的key值进行点积,进行比较,来查看let's和本身的相似度与let's和go的相似度大小。
softmax函数
由上诉图片中的例子,我们希望"let's"对其编码的影响大于单词"go",使用softmax函数来实现这个目标。
Softmax函数可以将一个含有任意实数的K维向量z压缩到另一个K维实向量σ(z)中,使得每一个元素的范围都在(0,1)之间,并且所有元素的和为1。
下图中,因为在上诉情况中"let's"比"go"相似得多,用1.0的"let's"来编码"let's",用0%的"go"来编码"let's"
value值
创建两个新的值(value)来表示“let's”, 创建两个新的值(value)来表示“go”,按照上诉比例进行缩放,再将缩放值进行相加
这些将输入词“let's”和"go"的独立编码根据它们与"let's"的相似度,进行组合的总和,就是“let‘s”的自注意力值。
编码器
以上步骤,我们就完成了transformers的编码器部分。
解码器
对于解码器来说,跟踪输入中的重要单词是非常重要的。因此编码器解码器注意力的主要思想是允许解码器跟踪输入中的重要单词。
添加残差连接 ,使编码器解码器注意力能够专注于输出单词和输入单词之间的关系,而不必保留之前发生的自注意力或之前发生的单词和位置编码。
总结
transformers使用词嵌入将单词转换为数字,位置编码来跟踪单词顺序,自注意力跟踪输入和输出短语中的单词关系
编码器解码器注意力跟踪输入和输出短语之间的关系,确保输入中的重要单词在翻译中不会丢失