Transformer算法完全解读

什么是注意力?

我们观察事物时,之所以能够快速做出判断,是因为我们大脑能够将注意力能够以高分辨率接收于图片上的某个区域,并且以低分辨率感知其周边区域,并且视点能够随着时间而改变,换句话说就是人眼通过快速扫描全局图像,找到需要关注的目标区域(在阅读文本时就是快速扫描全文,然后找到关键段落、关键词),然后对这个区域分配更多注意,目的在于获取更多细节信息和抑制其他无用信息,从而快速作出判断,而并非是从头到尾的观察一遍事物后,才能有判断结果。

正是基于人类大脑这一特点,进行仿生,从而提出了深度学习中的注意力机制。在神经网络中,注意力机制可以认为是一种资源分配的机制,可以理解为对于原本平均分配的资源根据对象的重要程度重新分配资源,重要的单位就多分一点,不重要或者不好的单位就少分一点。

怎么将这种能力迁移到计算机上呢?

我们通过一个类比来说明:我们需要去定做一件衣服,想好需要的衣服后,我们去到服装店,把我们对衣服的关键性描述($query$,$Q$)告诉老板,例如”男士衬衫、格子衬衫、纯棉”,随后,老板在脑海里将我们的描述与店里所有衣服样品($value$,$V$)的描述($key$,$K$)进行对比,然后拿出相对更加匹配的样品给我们看,看了之后,我们就发现,有些衣服有50%(权重)符合我们的心意,有些衣服只有20%符合我们心意,难道我们选择最满意的一件吗?不是,我们告诉老板,这件样品,你取这50%的特点,那件样品,取另外20%的特点,直到凑成100%(加权平均的过程),也就是完整衣服的特征,最后那件凑成的衣服,就是我们想要的衣服(注意力值)。

Transformer算法中的注意力机制,跟这个定做衣服的过程是很类似的。这里有三个很关键的概念,也就是上面提到的$query$(来自源数据)、$key$(来自目标数据)、$value$(来自目标数据),这里用”来自”这个词有些不太准确,因为$query$、$key$、$value$是通过源数据、目标数据(都是矩阵)与不同的矩阵($W^Q$, $W^K$, $W^V$)相乘得到,放在神经网络中就是经过线性层变换。$query$、$key$、$value$三者之间是存在联系的,联系越紧密(越相似),那么权重就越大,最终获得的注意力就越多,所以,怎么来评判它们之间的相似度就很关键了。最简单的,就是使用余弦相似度,但是这里,我们更多的是使用点积的方式,两个向量越相似,点积就越大。获得点积之后,进行softmax操作,然后再与$value$矩阵进行加权求和,就获得了最终整个序列的注意力值。整个过程如图5所示。公式表示如下:

$$Attention(Q, K, V)=softmax(\frac{QK^T}{\sqrt[]{d_k}})$$

式中,$d_k$为输入样本维度数,除以$\sqrt[]{d_k}$是为了对最终注意力值大小进行规范化,使注意力得分贴近于正态分布,有助于后续梯度下降求解。

Transformer算法完全解读

图5 注意力机制

Transformer中的注意力机制又不仅于此,Transformer还是用了一种自注意力机制,这种注意力机制中$query$、$key$、$value$三者都是同一矩阵经过变化得来,当然,再简化一点,直接使用初始数据矩阵作为$query$、$key$、$value$也不是不行。

这个过程很重要,是Transformer的核心,我们再用更加数学化的方式表述一遍。假设存在序列数据集$X={x_1, x_2, x_3, …, x_T}$(可以认为$x_1$是文本中的第一个词),$X$经过词嵌入和位置编码后,转为为${a_1, a_2, a_3, …, a_T}$,我们分别使用$W^Q$, $W^K$, $W^V$与之相乘,获得$q_i$,$k_i$,$v_i$,$i \in (1, 2, 3, …, T)$。以$x_1$为例,如何获得$x_1$的注意力值呢?

  • 首先,我们用$x_1$对应的$query$即$q_1$与$k_1, k_2, k_3, …, k_T$计算向量点积, 得到$\alpha_{11}, \alpha_{12}, \alpha_{12}, …, \alpha_{1T}$。注意,这时候的,$\alpha_{11}, \alpha_{12}, \alpha_{12}, …, \alpha_{1T}$在取值范围上,可未必在[0, 1]之间,还需要经过softmax处理;
  • 然后,将$\alpha_{11}, \alpha_{12}, \alpha_{12}, …, \alpha_{1T}$输入softmax层,从而获取值在[0, 1]之间的注意力权重值,即$\hat \alpha_{11}, \hat \alpha_{12}, \hat \alpha_{12}, …, \hat \alpha_{1T}$,这相当于一个概率分布矩阵;
  • 最后,将$\hat \alpha_{11}, \hat \alpha_{12}, \hat \alpha_{12}, …, \hat \alpha_{1T}$分别与对应的$v_1, v_2, v_3, …, v_T$相乘,然后求和,这样便获得了与输入的$x_1$相对应的注意力值$b_1$。

经过注意力机制层后,输出矩阵中的每个词向量都含有当前这个句子中所有词的语义信息,这对提升模型性能是极为关键的。

注意力机制实现过程代码如下所示:

Original: https://www.cnblogs.com/chenhuabin/p/16453665.html
Author: 奥辰
Title: Transformer算法完全解读

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/809976/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • python test.py_python之测试框架pytest(二)

    一、ddt(数据驱动测试 Data-Driven Testing) 1、数据和测试逻辑分离,便于维护。当数据和测试逻辑各自需要修改的时候,不会影响到对方 2、测试用例之间是独立的,…

    Python 2023年9月13日
    042
  • flask框架使用uWSGI部署服务

    前言:由于工作需要使用flask写了一个简易的http服务用来提供接口,按照接口文档demo写好以后本地测试一切正常,但是发布到服务器以后有一串警告:WARNING:This is…

    Python 2023年8月9日
    060
  • Python中的range函数和arange函数的区别与联系

    相信很多使用Python的小伙伴,都用到过range()函数,进行循环或遍历。 for i in range(len(a)): print(a[i]) 但当我们用得正嗨时,可能突然…

    Python 2023年8月28日
    045
  • 就离谱!使用机器学习预测2022世界杯:小组赛挺准,但冠亚季军都错了 ⛵

    💡 作者:韩信子@ShowMeAI📘 数据分析实战系列:https://www.showmeai.tech/tutorials/40📘 机器学习实战系列:https://www.s…

    Python 2023年10月29日
    046
  • <Linux>Django使用教程<一>

    开发环境:deepin、idea2020.1、python3.7、Django3.2.9本次学习 Django的同学,最好具备 python基础,以及 linux基础。 一、安装与…

    Python 2023年8月4日
    060
  • Pytorch教程

    Tensor介绍 1 Tensor构建 * 张量可以直接从数据中创建。数据类型是自动推断的 张量可以从NumPy数组中创建 从另一个tensor创建 torch.rand_like…

    Python 2023年8月24日
    066
  • pandas进阶–pivot方法重塑Dataframe

    文章目录 欢迎关注公众号【Python开发实战】,免费领取Python学习电子书! pivot方法 * pivot方法介绍 用例1 用例2 用例3 欢迎关注公众号【Python开发…

    Python 2023年8月17日
    054
  • 【Flask+Echarts】使用Flask框架可视化的案例

    回答1: 和MySQL来实现数据 ,可以通过 步骤来实现: 1. 来搭建Web应用程序,根据需要设置路由和视图函数。 2. MySQL数据库来存储数据,建立需要的数据表,并通过 的…

    Python 2023年8月9日
    055
  • 【Python/数据分析】Pandas

    文章目录 * – + pandas简介 + pandas基本数据结构 + * Series * – 使用list初始化Series – 自定义S…

    Python 2023年8月21日
    051
  • SQL注入简介与原理

    数据来源 本文仅用于信息安全学习,请遵守相关法律法规,严禁用于非法途径。若观众因此作出任何危害网络安全的行为,后果自负,与本人无关。 SQL注入 首先从SQL注入存在的代码来看 假…

    Python 2023年11月9日
    046
  • pygame小游戏(接球小游戏)

    本游戏要使用的是由Pycharm中的pygame模块来实现的,也可以在python中运行。 Pygame和sys模块 import pygame import sys random…

    Python 2023年9月20日
    046
  • 深度学习之DCN

    这篇文章介绍了一种可针对空间不变性的卷积方法,不同于常规的卷积网络种卷积核和待提取feature map是相同的(假设dilation=1),可变形卷积(Deformable Co…

    Python 2023年10月26日
    067
  • numpy中的矩阵乘法:numpy中运算符* @ mutiply dot的用法

    在完成作业的过程中,对 multiply函数、 *运算符号、 dot函数的功能经常混淆。在这里做一个简单的区分,并不一定严谨。每个函数对于数组和矩阵的操作内容也存在差异。 本博客只…

    Python 2023年8月29日
    041
  • educoder:实验十 字典

    第1关:统计文档中作者作品数量 任务描述 本关任务:编写一个能计算文档《中学诗词.txt》中各位作者作品数量的程序。 遍历文档中每一行,提取作者的姓名,将其作为键加入到字典中,字典…

    Python 2023年7月31日
    083
  • 【双十一特辑】爱心代码(程序员的浪漫)-李峋

    前言 最近《点燃我温暖你》中李峋的爱心代码超级火,看着特别心动,这不,光棍节快到了,给兄弟们教学一波爱心代码,赶在双十一前表白,让这个双十一不在是孤单一个人! 目录 前言 C语言简…

    Python 2023年7月31日
    066
  • 端水or信仰?ChatGPT“点评”Web3未来

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年11月4日
    045
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球