Google BERT入门(5)Transformer通过位置编码学习位置

文章目录

  • [6. Google BERT入门(5)Transformer通过位置编码学习位置](#6. Google BERT入门(5)Transformer通过位置编码学习位置)

6. Google BERT入门(5)Transformer通过位置编码学习位置

考虑输入句子"I love learning"。在RNN(Recurrent Neural Network,递归神经网络)中,我们逐词将句子输入网络。也就是说,首先输入单词"I",然后输入单词"love",等等。我们逐词输入句子,以便网络完全理解句子。但是,在transformer网络中,我们不遵循递归机制。所以,我们不是逐词输入句子,而是将句子中的所有单词并行输入网络。并行输入单词有助于减少训练时间,也有助于学习长期依赖关系。

然而,问题是由于我们并行输入单词到transformer中,如果单词顺序没有保留,它将如何理解句子的含义?要理解句子,单词顺序(句子中单词的位置)是重要的,对吧?是的,单词顺序非常重要,因为它有助于理解句子中每个单词的位置,这反过来又有助于理解句子的含义。

所以,我们应该向transformer提供一些关于单词顺序的信息,以便它能够理解句子。我们怎样才能做到这一点?现在,让我们更详细地探讨这个问题。

对于给定的句子"I love learning",首先,我们获取句子中每个单词的嵌入向量。设嵌入维度为dmodel。假设嵌入维度dmodel是4。那么,我们的输入矩阵维度将是[句子长度 x 嵌入维度] = [3 x 4]。

我们使用输入矩阵(嵌入矩阵)表示我们的输入句子"I love learning"。设输入矩阵如下:

图1.25 -- 输入矩阵

现在,如果我们直接将前面的输入矩阵传递给transformer,它无法理解单词顺序。所以,我们不是直接将输入矩阵喂给transformer,而是需要添加一些信息来指示单词顺序(单词的位置),以便我们的网络能够理解句子的含义。为此,我们引入了一种称为位置编码的技术。位置编码,顾名思义,是一种指示句子中单词位置(单词顺序)的编码。

位置编码矩阵P的维度与输入矩阵X相同。现在,在直接将输入矩阵(嵌入矩阵)喂给transformer之前,我们包含了位置编码。因此,我们简单地将位置编码矩阵加到嵌入矩阵上,然后作为输入喂给网络。现在,我们的输入矩阵不仅包含单词的嵌入,还包含句子中单词的位置:

图1.26 -- 将输入矩阵和位置编码矩阵相加

现在,我们很自然地要提出这样一个问题:位置编码矩阵究竟是如何计算的?transformer论文《Attention Is All You Need》的作者使用了正弦函数来计算位置编码,如下所示:

在这两个方程中,pos表示句子中单词的位置,而i表示嵌入的位置。让我们通过一个例子来理解这两个方程。使用前面的方程,我们可以写出以下内容:

图1.27 -- 计算位置编码矩阵

从前面的矩阵中,我们可以观察到,在位置编码中,当i是偶数时我们使用正弦函数,当i是奇数时我们使用余弦函数。简化前面的矩阵,我们可以写出以下内容:

图1.28 -- 计算位置编码矩阵

我们知道,在我们的输入句子中,单词"I"位于第0位,love位于第1位,learning位于第2位。代入值,我们可以写出以下内容:

图1.29 -- 计算位置编码矩阵

因此,我们的最终位置编码矩阵 是如下给出的:

图1.30 -- 位置编码矩阵

计算位置编码后,我们简单地对嵌入矩阵进行逐元素加法,并将修改后的输入矩阵喂给编码器。

现在,让我们重新审视我们的编码器架构。单个编码器块如下图所示。我们可以观察到,在直接将输入喂给编码器之前,首先我们获取输入嵌入(嵌入矩阵),然后我们将其与位置编码相加,然后将其作为输入喂给编码器:

图1.31 -- 单个编码器块

至此,我们了解了位置编码器是如何工作的;在上一节中,我们还学习了多头注意力子层是如何工作的。在下一节中,我们将学习编码器中的前馈网络子层是如何工作的。


感谢您的阅读,欢迎关注!


相关推荐
訾博ZiBo4 分钟前
AI日报 - 2025年4月10日
人工智能
IT古董22 分钟前
【漫话机器学习系列】182.噪声修正线性单元(Noisy ReLU)
人工智能·深度学习·机器学习
青铜念诗1 小时前
Ubuntu(CentOS、Rockylinux等)快速进入深度学习pytorch环境
深度学习·ubuntu·centos
oioihoii2 小时前
AI随身翻译设备:从翻译工具到智能生活伴侣
人工智能·生活
努力当一个优秀的程序员2 小时前
0.机器学习基础
人工智能·机器学习
bjxiaxueliang3 小时前
一文详解OpenCV环境搭建:Ubuntu20.4使用CLion配置OpenCV开发环境
人工智能·opencv·计算机视觉
Allen_LVyingbo3 小时前
思维链编程模式下可视化医疗编程具体模块和流程架构分析(全架构与代码版)
大数据·人工智能·重构·架构·健康医疗
有一只柴犬3 小时前
5. 深度剖析:Spring AI项目架构与分层体系全解读
人工智能·spring·架构
进击的阿晨3 小时前
从入门到精通!DeepSeek 最全学习资源网盘合集(附 2025 最新资料包)
深度学习
乌旭4 小时前
英伟达Blackwell架构深度拆解:新一代GPU如何突破算力瓶颈?
数据结构·人工智能·深度学习·机器学习·ai·架构·ai编程