一文带你深度剖析什么叫Transformer
Transformer概述
Transformer是基于自注意机制(self-attention)的神经网络模型。其经常用于来处理时序数据。我们知道还有另外的常用的两类深度神经网络模型循环神经网络(RNN)和卷积神经网络(CNN)。那么对于Transformer而言,其相较于另外两种的优势在哪呢?
- 其使用自注意机制,可同时并行处理时序数据,计算他们之间的相关性
- 并且其输入时引入了位置编码来保留的序列的相关信息
- 因为其可并行处理,所以训练速度可以很快
其结构如下图所示,其特性正是由其结构所决定的,所以接下来带你逐步分析逐层结构。

分模块解析Transformer
模型的输入输出
首先来看输入输出部分,从结构图也很容易看出来,输入有两个,输出一个。那我们以机器翻译为例,左部分输入(Inputs)为需要待翻译的英文数据,右边输入(Outputs(shifted right))为中文的翻译标注数据,那么最终的输出(Outputs Probabilities)即为翻译预测的结果。

其输入首先会经过模型的词向量层进行处理,简单来说就是单词的序列会被转换为单词向量的序列。但是如果仅仅就是这样的序列输入到模型中,会出现一个很大的问题,因为模型是并行处理的,对于这样的输入数据,模型是无法知道其位置如何的,比如我们输入的是Are you ok?但是模型可能会以为是You are ok?或者是Ok? Are you那么对于这样的情况应该怎么处理呢?所以Transformer引入了位置编制加入其位置信息。

位置编码(Positional Encoding)
我们现在知道了其引入位置编码的目的就是为了将其位置信息附加到原始的信息上面,其实现是通过正弦函数和余弦函数的计算来实现的。

具体就是pos代表着在序列中的位置,2i和2i+1怎么理解呢,我们就可以将其看为偶数维度和奇数维度,即对于Are而言PE(0,0),PE(0,2)使用正弦计算其位置信息,PE(0,1),PE(0,3)则使用余弦计算其位置信息。其中d代表了总的维度。故其最终的输入信息为加入了位置信息的编码,如下所示:

编码器解码器结构(Encoder-Decoder)
经过位置编码后的数据则会被输入到Encoder-Decoder结构中,其中N代表了有多个Encoder和Decoder,论文中的N为6.其总共有三个计算过程。

- 计算过程1
待翻译的英文数据经过编码输入后会首先进入其编码器(Encoder),经过多头自注意力机制(Muti-Head Attention),在经过残差连接和归一化层。这里注意下,这里使用的是层归一化(LN),那么为什么不使用批归一化(BN)?因为BN是通过将一个批次的同一维度进行归一化,用其均值方差,代表整个数据的均值方差,那么对于处理不同长度的时序数据就会出现问题,可能有些序列特别长,那么部分维度的数据可能就会特别少,这就会导致其数据太少,噪音过大,不能够正确的代表整个数据的均值方差。然后在经过前馈网络和残差归一化得到最后的编码输出。
- 计算过程2
其实与计算过程1相类似,只不过这里使用的是掩码多头注意力机制(Masked Multi-Head Attention),其与多头自注意力机制(Muti-Head Attention)区别就在于加入了掩码,掩盖了后续的信息。这么做的原因就在于,我们真实预测的时候,是无法知道后续的信息的,我们只能根据我们已有的信息和已经推断出来的信息去推测下一个可能的预测。
- 计算过程3
经过计算1和计算2得出的编码信息会一同进入第三个计算过程进行解码,得到最后的预测结果输出。
多头注意力机制(Muti-Head-Attention)
前文说了很多遍的多头自注意力机制(Muti-Head Attention)了,那么其到底是如何运行的呢?其具体的结构如下图

其就是通过Q、K、V三个线性层对输入数据进行特征变换,在通过注意力机制对其进行融合,多头的意思即有多个自注意机制层。最后将所有自注意机制层的结果进行合并,通过线性层得到最终的输出。(这里我并未详细说明什么是注意力机制,大家其就可以简单的理解其为一个线性处理即可)
具体的计算过程如下,经过编码后的输入x会与Q、K、V三个线性层进行处理得到Qx,Kx,Vx三个不同的编码信息,然后我们通过注意力机制进行融合。

其公式为。简单理解就是对于Q、K、V三组信息,进行选择与融合,从而得到最终的注意力机制结果。

看到这里相信你已经对于Transformer的结构已经有了很深入的了解了,但是这仅仅就是理论的基础,后续将会给大家更新如何搭建自己的transformer去处理相关的问题。
参考资料:
[Transformer模型详解,Attention is all you need](Transformer模型详解,Attention is all you need_哔哩哔哩_bilibili)
Transformer从零详细解读(可能是你见过最通俗易懂的讲解)
一文带你深度剖析什么叫Transformer的更多相关文章
- OpenHarmony 3GPP协议开发深度剖析——一文读懂RIL
(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点)本文转载自:https://harmonyos.51cto.com/posts/10608 夏德旺 软通动力信息技术(集 ...
- HashMap源码深度剖析,手把手带你分析每一行代码,包会!!!
HashMap源码深度剖析,手把手带你分析每一行代码! 在前面的两篇文章哈希表的原理和200行代码带你写自己的HashMap(如果你阅读这篇文章感觉有点困难,可以先阅读这两篇文章)当中我们仔细谈到了哈 ...
- 深度好文:Linux文件系统剖析
一个执着于技术的公众号 Linux 文件系统体系结构是一个对复杂系统进行抽象化的有趣例子.通过使用一组通用的 API 函数,Linux 可以在许多种存储设备上支持许多种文件系统.例如,read 函数调 ...
- ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借
ASP.NET MVC深入浅出系列(持续更新) 一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...
- .NET5.0 单文件发布打包操作深度剖析
.NET5.0 单文件发布打包操作深度剖析 前言 随着 .NET5.0 Preview 8 的发布,许多新功能正在被社区成员一一探索:这其中就包含了"单文件发布"这个炫酷的功能,实 ...
- 【项目实践】一文带你搞定Spring Security + JWT
以项目驱动学习,以实践检验真知 前言 关于认证和授权,R之前已经写了两篇文章: [项目实践]在用安全框架前,我想先让你手撸一个登陆认证 [项目实践]一文带你搞定页面权限.按钮权限以及数据权限 在这两篇 ...
- 《AngularJS深度剖析与最佳实践》简介
由于年末将至,前阵子一直忙于工作的事务,不得已暂停了微信订阅号的更新,我将会在后续的时间里尽快的继续为大家推送更多的博文.毕竟一个人的力量微薄,精力有限,希望大家能理解,仍然能一如既往的关注和支持sh ...
- Objective-C类成员变量深度剖析
目录 Non Fragile ivars 为什么Non Fragile ivars很关键 如何寻址类成员变量 真正的“如何寻址类成员变量” Non Fragile ivars布局调整 为什么Objec ...
- LCD深度剖析
LCD 深度剖析 来源:http://blog.csdn.net/hardy_2009/article/details/6922900 http://blog.csdn.net/jaylondon/a ...
- 【渗透课程】第二篇下-HTTP协议的请求与响应深度剖析
[渗透课程]第二篇下-HTTP协议的请求与响应深度剖析 HTTP1.1目前支持以下7种请求方法: 常见的MIME类型如下: 第一个数字有五种可能的取值: 目录 什么是请求方法?什么是请求头? HTTP ...
随机推荐
- HTTPS 证书自动化运维:基础知识与重要性
简介: 随着互联网的飞速发展和网络安全威胁的日益增多,HTTPS(HyperText Transfer Protocol Secure)已经成为保护网站和用户数据安全的标准协议.HTTPS 证书的管理 ...
- MySQL-8.0.20
版本: 8.0.20 操作: Centos 7 Linux 未介绍针对数据库的详细操作,如有需求请前往 第一章 MySQL的介绍及安装 1.介绍 1.1 数据库管理系统(DBMS) RDBMS : O ...
- [记录点滴] 一个Python中实现flatten的方法
之前如果想使用flatten,一般借助于numpy.ndarray.flatten. 但是 flatten只能适用于numpy对象,即array或者mat,普通的list列表不适用. 最近找到一个轻便 ...
- Zabbix 安装报错解析
一.Q:Error connecting to database: Access denied for user 'zabbix' @ 'localhost' to database 'zabbix' ...
- 5.main.js配置
1.根目录新建api文件夹 api文件夹分mock(存放虚拟json)和urls(api请求链接) urls 中新建index.js来汇总按分类拆分的url请求文件 2.添加api配置 imp ...
- 《Vue2 框架第二课:组件结构与模板语法详解》
写在开头:Vue.js 是一个流行的前端框架,广泛应用于构建用户界面和单页应用(SPA).然而,需要注意的是,Vue2 已经于 2023 年底 正式停止维护.这意味着官方团队将不再为 Vue2 提供功 ...
- 理解 SystemVerilog 中的循环与并发线程
1. 首先理解 scope 的概念 除了常见的module.interface.class.task以及function等等,另外,begin-end block 和 fork-join block ...
- 泰山派(Linux)播放音乐
泰山派(Linux)录音/播放音乐 alsamixer 声卡: 播放:play(较详细),aplay 录音:arecord 麦克风可用: Main_mic可用 录音(wav/mp3) ar ...
- 小米手机/红米手机解锁BL详细教程
由于MIUI解锁风控提升,全部小米默认为支持解锁BootLoader的 但需要登录小米账号后,到开发者选项将设备和账号绑定0-1000小时,一般默认为168小时,部分新机实际几百小时,具体绑定时间,我 ...
- hbase - [02] 分布式安装部署
一.角色规划 主机名 node01 node02 node03 node04 Zookeeper ○ ○ ○ NameNode ○ ○ JournalNode ○ ○ ○ DataNo ...