解析Transformer基本结构与实现

目录

基本结构

1.输入部分包含: 

2. 编码器部分:

2.1 掩码张量

学习并实现了生成向后遮掩的掩码张量函数: subsequent_mask

 2.2 注意力机制

2.3 多头注意力机制 

3. 解码器部分:

 4. 输出部分包含:


  • 三类应用
  1. 机器翻译类应用-Encoder和Decoder共同使用
  2. 只使用Encoder端-文本分类BERT和图片分类VIT
  3. 只使用Decoder端-生成类模型
     

笔记参考b站视频:2.3.1掩码张量-part1_哔哩哔哩_bilibili

基本结构

​    Transformer总体架构可分为4个部分:

  •  输入部分
  • -输出部分
  • -编码器部分
  • -解码器部分

1.输入部分包含: 

  1. 原文本嵌入层(Input embedding)及其位置编码(position encoding)
  2. 目标文本嵌入层及其位置编码器

  

  • 文本嵌入层的作用:

       无论是源文本嵌入还是目标文本嵌入,都是为了将文本中词汇的数字表示(word to index)转变为向量(eg. one-hot,但这里不是)表示,希望在这样的高维空间捕捉词汇间的关系。

  • 位置编码器的作用:

        因为在Transformer的编码器结构中,并没有针对词汇位置信息的处理,因此需要在Embedding层后加入位置编码器,将词汇位置不同可能会产生不同语义的信息加入到词嵌入张量中,以弥补位置信息的缺失。

2. 编码器部分:

  1.     由N个编码器层堆叠而成 每个编码器层由两个子层连接结构组成
  2.     第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接
  3.     第二个子层连接结构包括一个前馈全连接子层(Linear)和规范化层以及一个残差连接

2.1 掩码张量

什么事掩码张量:   

        掩代表遮掩,码就是我们张量中的数值,它的尺寸不定,里面一般只有1和0的元素,代表位置被遮掩或者不被遮掩,至于是0位置被遮掩还是1位置被遮掩可以自定义,因此它的作用就是让另外一个张量中的一些数值被遮掩,也可以说被替换,它的表现形式是一个张量。

掩码张量的作用:

        在transformer中,掩码张量的主要作用在应用attention(将在下一小节讲解)时,有一些生成的attention张量中的值计算有可能已知了未来信息而得到的,未来信息被看到是因为训练时会把整个输出结果都一次性进行Embedding,但是理论上解码器的的输出却不是一次就能产生最终结果的,而是一次次通过上一次结果综合得出的,因此,未来的信息可能被提前利用。所以,我们会进行遮掩。关于解码器的有关知识将在后面的章节中讲解。

学习并实现了生成向后遮掩的掩码张量函数: subsequent_mask

        它的输入是size,代表掩码张量的大小.
        它的输出是一个最后两维形成1方阵的下三角阵.
        最后对生成的掩码张量进行了可视化分析,更深一步理解了它的用途.
 

# np.triu 演示
>>> np.triu([[1,2,3],[4,5,6],[7,8,9],[10,11,12]], k=-1) #k=-1表示主对角线(1,5,9)的元素往下移动一个后下放的元素全为0
array([[ 1,  2,  3],[ 4,  5,  6],[ 0,  8,  9],[ 0,  0, 12]])>>> np.triu([[1,2,3],[4,5,6],[7,8,9],[10,11,12]], k=0) #k=0,表示主对角线元素及其往下的元素都为0
array([[1, 2, 3],[0, 5, 6],[0, 0, 9],[0, 0, 0]])>>> np.triu([[1,2,3],[4,5,6],[7,8,9],[10,11,12]], k=1) #k=1,表示主对角线元素往上移一步后以下的元素都为0
array([[0, 2, 3],[0, 0, 6],[0, 0, 0],[0, 0, 0]])

 2.2 注意力机制

  • 什么是注意力:

        我们观察事物时,之所以能够快速判断―种事物(当然允许判断是错误的),是因为我们大脑能够很快把注意力放在事物最具有辨识度的部分从而作出判断,而并非是从头到尾的观察一遍事物后,才能有判断结果.正是基于这样的理论,就产生了注意力机制。

  • 我们这里使用的注意力的计算规则:
     

  •  Q,K,V的比喻解释:

         假如我们有一个问题:给出一段文本,使用一些关键词对它进行描述!
为了方便统一正确答案,这道题可能预先已经给大家写出了一些关键词作为提示。其中这些给出的提示就可以看作是key,而整个的文本信息就相当于是query,value的含义则更抽象,可以比作你看到这段文本信息后,脑子里浮现的答案信息,,这里我们又假设大家最开始都不是很聪明,第一次看到这段文本后脑子里基本上浮现的信息就只有提示这些信息,因此key与value基本是相同的,但是随着我们对这个问题的深入理解,通过我们的思考脑子里想起来的东西原来越多,并且能够开始对我们query也就是这段文本,提取关键信息进行表示.这就是注意力作用的过程,通过这个过1我们最终脑子里的value发生了变化,
        根据提示key生成了query的关键词表示方法,也就是另外一种特征表示方法.
刚刚我们说到key和value一般情况下默认是相同,与query是不同的,这种是我们一般的注意力输入形式,但有一种特殊情况,就是我们query与key和value相同,这种情况我们称为自注意力机制,就如同我们的刚刚的例子。使用一般注意力机制,是使用不同于给定文本的关键词表示它.而自注意力机制,需要用给定文本自身来表达自己,也就是说你需要从给定文本中抽取关键词来表述它,相当于对文本自身的一次特征提取。

简单的:

  • Q:我们要查询的信息,eg, 高领男士毛衣(查询和别人的关系)
  • K:正在被查询的信息,eg,高龄,男士,毛衣(身份证)
  • v:被查询的内容(特征表示)

或者理解:

  • Q是一段准备被概括的文本;
  • K是给出的提示;
  • V是大脑中的对提示K的延伸.。

当Q=K=V时,称作自注意力机制。(给你一篇文章提主旨,你说需要给个参考,结果“没参考”,即给你的参考是和原文一模一样的文章)
 

  •  什么是注意力机制:

        注意力机制是注意力计算规则能够应用的深度学习网络的载体,除了注意力计算规则外,还包括一些必要的全连接层以及相关张量处理,使其与应用网络融为一体。使用自注意力计算规则的注意力机制称为自注意力机制。

  • 注意力机制在网络中实现的图形表示:

  • 注意力计算规则的函数: attention
  1. 它的输入就是Q,K,V以及mask和dropout, mask用于掩码, dropout用于随机置0。
  2. 它的输出有两个,query的注意力表示(词嵌入的维度)以及注意力张量

 

mask-fill演示:

 

2.3 多头注意力机制 

  • 什么是多头注意力机制:

        从多头注意力的结构图中,貌似这个所谓的多个头就是指多组线性变换层,其实并不是,我只有使用了一组线性变化层,即三个变换张量对Q,K,V分别进行线性变换,这些变换不会改变原有张量的尺寸,因此每个变换矩阵都是方阵,得到输出结果后,多头的作用才开始显现,每个头开始从词义层面分割输出的张量,也就是每个头都想获得一组Q,K,v进行注意力机制的计算,但是句子中的每个词的表示只获得一部分,也就是只分割了最后一维的词嵌入向量.这就是所谓的多头,将每个头的获得的输入送到注意力机制中,就形成多头注意力机制。

  • 多头注意力机制结构图:

  •  多头注意力机制的作用:

        这种结构设计能让每个注意力机制去优化每个词汇的不同特征部分,从而均衡同一种注意力机制可能产生的偏差,让词义拥有来自更多元的表达,实验表明可以从而提升模型效果。

3. 解码器部分:

  1. 由N个解码器层堆叠而成 每个解码器层由三个子层连接结构组成
  2. 第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接
  3. 第二个子层连接结构包括一个多头注意力子层和规范化层以及一个残差连接
  4. 第三个子层连接结构包括一个前馈全连接子层和规范化层以及一个残差连接

 4. 输出部分包含:

  1. 线性层(得到output size)
  2. softmax处理器(找到最大概率)

 

  • 就是重新组合各大输入向量,得到更完美的特征。

参考:Vision Transformer 超详细解读 (原理分析+代码解读) (一) - 知乎 (zhihu.com)

 输入序列x1,x2,x3,x4,对x1~x4提取特征。探究x1,x2,x3,x4之间的关系,利用3个辅助向量Q,K,V。

每一个token对应3个向量Q,K,V;

Q:查一查自己与别人的关系

K:自己是被查对象,身份证的key

V:特征表达(x1用v1表达,后面与x1则没关系了,用v1代替)

通过这个操作得到一个权重项,再把特征进行重新组合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/388.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

你知道GPT-3带的即时学习能力是什么吗

你知道GPT-3带的即时学习能力是什么吗 在人工智能领域,GPT-3(Generative Pre-trained Transformer 3)是当前比较先进的自然语言处理模型之一。它采用了自监督学习的方式进行训练,并且拥有强大的“in-context learning”&#xff…

自学Python 69 Selenium八大元素定位方法(新版BY方法)

Python Selenium八大元素定位方法(新版BY方法) 文章目录 Python Selenium八大元素定位方法(新版BY方法)前言一、常用的八种定位方法(新旧对比)二、查看网页元素三、八大元素定位示例1、id定位2、name定位3、class定位4、tag定位5、link定位6、partial_li…

Vue-消息订阅与发布(pub/sub)

消息订阅与发布(pub/sub) 消息订阅与发布和全局事件总线一样,也是一种组件间通信的方式 pub/sub全称为publisher(订阅)/subscriber(发布),一般需要数据的人订阅消息,提供数据的人发布消息 这个技术非常简单容易上手,主要有以下两步 1 订阅…

HTML5 游戏开发实战 | 贪吃蛇

在该游戏中,玩家操纵一条贪吃的蛇在长方形场地里行走,贪吃蛇按玩家所按的方向键折行,蛇头吃到食物(豆)后,分数加10分,蛇身会变长,如果贪吃蛇碰上墙壁或者自身的话,游戏就结束了(当然也可能是减去…

Docker 部署 jar 项目

文章目录 1、上传jar包2、新建 Dockerfile 文件3、新建 deploy.sh 脚本(创建并运行)4、新建 upgrade.sh 脚本(更新) 1、上传jar包 2、新建 Dockerfile 文件 添加jar包及修改端口 # 基础镜像 FROM java:8 # 添加jar包 ADD servic…

uniapp视频播放器

微信小程序使用hic-video-player app(android和ios)使用好用视频播放器注:用的是旧版本的这个组件 目前只有app中支持竖屏横批选集 android视频全屏是通过 beforeDestroy() {// #ifdef APP-VUE// 页面关闭时关闭沉浸模式if (uni.getSystemInfoSync().platform &quo…

CLO-GitHub网站注册登录

一、GitHub GitHub是一个面向开源及私有软件项目的托管平台,仅支持Git作为唯一的版本库格式进行托管。 二、登录官网 网站:https://github.com/ 2.1 注册Sign up Enter your Email(输入邮箱地址)->Continue-> ->Create a…

长尾关键词有什么作用?要怎么用?

长尾关键词很多的网站都会忽略其存在,其实你不要小看长尾关键词,他将带给网站的流量也是极其可观的,所说比不上那些重点关键词的流量,但是对提升网站的权重还是有着重要的作用。 长尾关键词有什么用?长尾关键词的3…

蓝桥杯专题-试题版-【数列排序】【数列特征】【特殊的数字】【特殊回文数】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

ES-工作原理

前言 ​ 搜索引擎是对数据的检索,而数据总体分为两种:结构化数据和非结构化数据。而对于结构化数据,因为他们具有特定的结构,所以一般都是可以通过关系型数据库MySQL/oracle的二维表的方式存储和搜索,也可以建立索引。…

低代码——前端开发人员的利器

作为前端开发人员,我们时刻追求着更高效、更灵活的开发方式,以满足日益增长的业务需求和用户体验要求。近年来,低代码开发平台逐渐崭露头角,成为我们探索的新领域。低代码为我们提供了一种新的开发方式,将我们从繁琐的…

【Spring Cloud Sleuth 分布式链路跟踪】 —— 每天一点小知识

💧 S p r i n g C l o u d S l e u t h 分布式链路跟踪 \color{#FF1493}{Spring Cloud Sleuth 分布式链路跟踪} SpringCloudSleuth分布式链路跟踪💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云…