Transformer算法完全解读

什么是注意力?

当我们看东西时,我们能够快速做出判断,因为我们的大脑可以在高分辨率下接收我们对图片某个区域的注意力,并在低分辨率下感知周围区域。而且视点可以随着时间的推移而改变,也就是说,人眼可以快速扫描全局图像,找到需要关注的目标区域(即在阅读文本时快速扫描全文)。然后找出关键段落、关键词),然后对这一领域多加关注,以便获取更详细的信息,压制其他无用的信息,从而快速做出判断,而不是从头到尾观察事情。才能得到判决。

[En]

When we look at things, we are able to make a quick judgment because our brain can receive our attention on a certain area of the picture at high resolution and perceive the surrounding area at low resolution. And the viewpoint can change over time, in other words, the human eye can quickly scan the global image to find the target area that needs attention (that is, quickly scan the full text when reading the text. Then find the key paragraphs, keywords), and then assign more attention to this area, in order to get more detailed information and suppress other useless information, so as to make a quick judgment, rather than observing things from beginning to end. to get a judgment.

仿生学正是基于人脑的特点而进行的,从而提出了深度学习中的注意机制。在神经网络中,注意力机制可以被看作是一种资源分配机制,可以理解为根据对象的重要性重新分配资源,从而将重要的单元划分得更多,将不重要的或不好的单元划分得更少。

[En]

It is based on the characteristics of the human brain that bionics is carried out, thus the attention mechanism in deep learning is proposed. In the neural network, the attention mechanism can be regarded as a mechanism of resource allocation, which can be understood as redistributing resources according to the importance of the object, so that the important units will be divided more and the unimportant or bad units will be divided less.

如何将这种能力转移到计算机上?

[En]

How can this ability be transferred to a computer?

我们通过一个类比来说明:我们需要去定做一件衣服,想好需要的衣服后,我们去到服装店,把我们对衣服的关键性描述($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$。

在注意机制层之后,输出矩阵中的每个词向量都包含了当前句子中所有词的语义信息,这对提高模型的性能至关重要。

[En]

After the attention mechanism layer, each word vector in the output matrix contains the semantic information of all the words in the current sentence, which is crucial to improve the performance of the model.

实现注意机制的流程代码如下:

[En]

The process code for implementing the attention mechanism is as follows:

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

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

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

(0)

大家都在看

  • Flask接口开发教程

    Flask接口开发教程 Flask是一个使用 Python 编写的轻量级 Web 应用框架,很适合个人开发,我们在此处做一个接口。 准备 我们搭建好python环境后使用pip i…

    Python 2023年8月14日
    071
  • pytest(二十三)–conftest.py作用范围

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

    Python 2023年9月12日
    042
  • Java agent 使用详解

    一、前言 于一个即将上线的应用来说,系统监控是必不可少的,为什么需要监控呢?应用是跑在服务器上的,应用在运行过程中会发生各自意想不到的问题,像大家熟知的OOM,mysql故障,服务…

    Python 2023年10月9日
    070
  • GitHub 上有个沙雕开发者,做了款斗图工具后火了…

    公众号关注 “五分钟学算法” 设为 “星标”,每天来点好玩的! 作者 | Rocky0429 来源 | Python空间 大家好,我…

    Python 2023年8月9日
    048
  • YOLOV5超参数设置与数据增强解析

    1、YOLOV5的超参数配置文件介绍 YOLOv5有大约30个超参数用于各种训练设置。它们在*xml中定义。/data目录下的Yaml文件。更好的初始猜测将产生更好的最终结果,因此…

    Python 2023年9月27日
    085
  • Python中关键字global与nonlocal的区别

    若在函数作用域中需要修改全局作用域或外层嵌套作用域中的变量,则需要使用global和nonlocal关键字。接下来,分别对关键字global和nonlocal的作用进行介绍。 1….

    Python 2023年8月24日
    038
  • python怎么启动线程_如何在Python中同时启动线程

    我想做一个小程序,播放一首歌和一个图像弹出时,鼠标光标移动。我有3个功能,可用于3个操作,我想同时运行它们,但我无法完成。你能帮帮我吗?在import random import …

    Python 2023年9月24日
    027
  • 【骚操作】Python 教你无损提取视频中的美女图片

    Original: https://www.cnblogs.com/123456feng/p/16140671.htmlAuthor: 蚂蚁ailingTitle: 【骚操作】Py…

    Python 2023年11月3日
    033
  • wsl2实现centos8安装、配置及解决命令缺失

    一、安装子系统 1. 启动虚拟机功能 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsyst…

    Python 2023年6月10日
    073
  • Pandas 筛选数据的 8 个神操作

    日常用 Python做数据分析最常用到的就是查询筛选了,按各种条件、各种维度以及组合挑出我们想要的数据,以方便我们分析挖掘。 今天我给大家总结了日常查询和筛选常用的种骚操作,供各位…

    Python 2023年8月18日
    053
  • 100天精通Python(数据分析篇)——第51天:numpy函数进阶

    ### 回答1: 这个问题的意思是询问一个学习 Python 数据分析_的 _100 天_计划,我的回答如下: _Python 数据分析_是非常重要的技能之一,学习它需要长时间的实…

    Python 2023年8月22日
    040
  • 实现fastdfs防盗链功能

    1、背景 2、实现原理 2.1 开启防盗链 2.2 重启 nginx 2.3 Java代码生成token 1、token生成规则 2、java生成token 3、测试 3.1 带正…

    Python 2023年10月19日
    040
  • Pandas基本使用

    文章目录 一、Pandas基本使用 * Pandas中的统计函数 读取csv文件 写csv文件 merge通过索引合并两个Dataframe 数据表合并 表连接 loc函数和ilo…

    Python 2023年8月8日
    040
  • 爬虫中scrapy模拟登录

    每日分享: 有人三分钟泡面,有人三小时煲汤;有人的外卖已送达,而有人才刚切好菜。当你选好了你要的方式,坚定下去,别胡思乱想;我们要走的路不一样,花期也不一样,不必焦虑。 目标: 应…

    Python 2023年10月2日
    057
  • Scrapy框架-redis分布式(从Scrapy框架创建项目到redis分布式)

    *盗墓笔记案例: 目标网址:http://www.daomubiji.com / scrapy 项目: 1. 创建项目 2. 创建爬虫 3. 定义item 数据内容: 1. 书的名…

    Python 2023年10月2日
    052
  • 线稿图视频制作–从此短视频平台不缺上传视频了

    🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝 🥰 博客首页: knighthood2001 😗 欢迎点赞👍评论🗨️ ❤️ 热爱python,期待与大家一同进步成长!!❤️ 👀 给大家推荐一款很火…

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