深度学习中的变形金刚——transformer

很荣幸能和这些大牛共处一个时代。网络结构名字可以是一个卡通形象——变形金刚,论文名字可以来源于一首歌——披头士乐队的歌曲《All You Need Is Love》。

transformer在NeurIPS2017诞生,用于英语-德语,英语-法语的翻译,在BLEU(bilingual evaluation understudy)指标上得到了很好的表现。由自然语言生成代码也是一种翻译,文生图也是一种转换,事实上chatgpt,bert都是基于tranformer的。

RNN的问题:

为了将前文的信息传递到后面,让后面的字符利用前文信息,其实已经有RNN了:

问题是前面的信息,越往后权重会低,是一个指数衰减的过程。

还有一个问题是权重反复利用,也是指数的关系,这样权重的细微抖动,就会造成很大的差异。

LSTM解决了一些RNN的问题

长短期记忆网络LSTM,但这项技术只能按照顺序处理句子,无法有效利用文章后面可能出现的线索。

使用了三个门:输入门,忘记门,输出门,每一个门由一个信号和激活函数控制。

transformer

来看transformer的结构

RNN是处理语言的主流方法,但其信息处理速度缓慢,就像老式的磁带播放器,必须逐字逐句地播放。而Transformer模型则像是一位高效的DJ,能够同时操控多个音轨,迅速捕捉到关键信息。

我们由粗到细地看,首先可以看到结构分为左右两部分,分别是Encoder和Decoder。其中有两种主要的结构,橘黄色的Multi-head Attention和蓝色的Feed forward,每个结构会连接一个Add&Norm,表示残差和层归一化。左边Encoder是1*Attention+1*Feed,右边是2*Attention+1*Feed。

multi-head attention又是由多个Self-Attention组成的。多个Self-Attention得到多个输出矩阵,concat到一起,就是multi-head attention。

Self-Attention

Self-Attention就涉及到了著名的QKV三元素。

QKV也是三个矩阵,分别是查询,键值,值。他们都来源于Embedding,经过不同的权重矩阵得到。self-attention的结构和输出:

QKV的目的是在数据库中查询。特点是查询的query是数据库本身的一部分,目的是要得到query在整个句子中的分量。QK的部分实现的是不同Q之间的组合,组合的过程和顺序无关,主要是相关性。比如翻译中名词会有一些定语,这部分期望权重的绝对值应该比较大,而根据修饰的正面和负面,权重可以是正负,所以不同Q之间甚至是可以抵消的。

Q和V一起起到了信息搬运的效果,他俩合在一起才是真正的Q。从数学意义上讲,两个向量积是 相似度,所以QV得到了相似度mask矩阵。softmax则起到了归一化的作用。

而V,顾名思义就是value,是要查询的数据库。它也是由最原始的输入映射得到的。它直接决定了“苹果”是食物还是公司。

Embedding

self-attention的输入是Embedding,Embedding就是原始语料特征映射的结果。一般使用Word2Vec等词嵌入方法,所以也叫嵌入向量。不管是什么单词,嵌入后统一为长度512的向量。

但是这样的向量是没有位置信息的。“我爱你”和“你爱我”中的“我”映射的是相同的向量。位置信息完全隐藏在嵌入向量的相对顺序中。而如果后面有池化操作,位置信息就会完全丢失。

所以除了词嵌入,还需要位置嵌入,然后把二者加起来:

这就需要位置嵌入结果也是固定长度的,比如512,便于和词嵌入结果相加。

transformer使用的编码是基于正弦-余弦的:

本来一个数字pos就可以表明位置,但是为了达到规定的长度,构建了正余弦交替的基本向量,当编码长度是4时,那就是4个基向量,然后把pos分别代入4个基向量中:


可以看到,固定位置pos时,分量交替使用正弦余弦,两两一组,每一组使用相同的值。

为什么使用正余弦作基?

1. 更有利于表示相对位置。由三角函数的特性,一个位置加减一个偏移量,新的位置向量可以由原来的位置向量线性组合得到。

2.相比于直接把pos转换成二进制,即便长度正好满足,每个比特位的变化频率明显不同(高比特位的变化频率更低),而基于正余弦的方法明显各个分量的更新都是同步的。


参考链接:

​​​​​​​黄仁勋集齐Transformer论文七大作者,对话一小时,干货满满_凤凰网

【深度学习】RNN循环神经网络和LSTM深度学习模型_最新深度学习分类模型-CSDN博客

OpenAI公关跳起来捂他嘴:Transformer作者公开承认参与Q* |八位作者最新专访_澎湃号·湃客_澎湃新闻-The Paper
深度学习attention机制中的Q,K,V分别是从哪来的? - 知乎
http://jalammar.github.io/illustrated-transformer/

详解Transformer (Attention Is All You Need) - 知乎

Transformer系列:快速通俗理解Transformer的位置编码 - 简书

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

21 如何进行高保真压测和服务扩容?

在后台架构中,压测非常常见,也是必须的工作。它能够帮我们发现微服务架构中的性能瓶颈,以及知道构建的微服务能承载的流量极限值。 但实际情况是,很多压测并不能发现瓶颈点和微服务所能承载的真实流量极限值。一方面是因为压测时…

LiveGBS user/save 逻辑缺陷漏洞复现(CNVD-2023-72138)

0x01 产品简介 LiveGBS是安徽青柿信息科技有限公司研发的一款国标(GB28181)流媒体服务软件,可提供提供用户管理及Web可视化页面管理,开源的前端页面源码;提供设备状态管理,可实时查看设备是否掉线等信息等。 0x02 漏洞概述 LiveGBS user/save 接口处存在逻辑缺陷漏洞,未…

【Qt之OpenGL】01创建OpenGL窗口

1.创建子类继承QOpenGLWidget 2.重写三个虚函数 /** 设置OpenGL的资源和状态,最先调用且调用一次* brief initializeGL*/ virtual void initializeGL() override; /** 设置OpenGL视口、投影等,当widget调整大小(或首次显示)时调用* brief resizeGL* param w* para…

请求接口报错:java.lang.IllegalStateException: argument type mismatch

目录 一、场景二、报错信息三、控制器四、接口调用五、原因六、解决 一、场景 1、调用后端接口报错 2、接口参数以Json方式传递 – 二、报错信息 java.lang.IllegalStateException: argument type mismatch Controller [com.xxx.huarunshouzheng.controller.MallControlle…

Ubuntu如何更换 PyTorch 版本

环境: Ubuntu22.04 WLS2 问题描述: Ubuntu如何更换 PyTorch 版本考虑安装一个为 CUDA 11.5 编译的 PyTorch 版本。如何安装旧版本 解决方案: 决定不升级CUDA版本,而是使用一个与CUDA 11.5兼容的PyTorch版本,您可…

75、堆-前K个高频元素

思路 这道题还是使用优先队列,是要大根堆,然后创建一个类,成员变量值和次数。大根堆基于次数排序。前k个就拿出前k的类的值即可。代码如下: class Solution {public int[] topKFrequent(int[] nums, int k) {if (nums null || …

解决: 0x803f7001 在运行Microsoft Windows 非核心版本的计算机上,运行“ slui.exe 0x2a 0x803f7001 “以显示错误文本,激活win10步骤流程。

一. 解决 0x803F7001在运行Microsoft Windows非核心版本的计算机错误 首先,按下winR打开"运行",输入 regedit 后回车,打开注册表。   然后再注册表下输入地址HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProt…

Electron+Vue3+Vite+ElectronForge整合 - 一键启动两个服务 一键打包两个服务

说明 本文介绍一下 Electron Vue3 Vite Electron Forge 的高级整合操作。vue3 : 使用 TS 的语法开发; Electron : 使用 JS 的语法开发。本文将从项目初始化开始,一步一步的完成项目的启动、打包全流程的介绍。实现的效果是 : 1、一个正常…

一个类实现Mybatis的SQL热更新

引言 平时用SpringBootMybatis开发项目,如果项目比较大启动时间很长的话,每次修改Mybatis在Xml中的SQL就需要重启一次。假设项目重启一次需要5分钟,那修改10次SQL就过去了一个小时,成本有点太高了。关键是每次修改完代码之后再重…

前端打包过大如何解决?

前端开发完毕部署到线上是,执行npm run build。当打包过大时,部署到服务端后加载缓慢,如何优化? 我们可以通过执行npm run analyze。可以看到各个包文件大小的区别。 当打包过大时,通过压缩gzip的方式,可以…

React路由导航

1. 什么是路由导航 一个路由跳转到另一个路由&#xff0c;并且在跳转的同时有可能需要传递参数进行通信&#xff0c;比如列表页跳转到详情页携带参数 2. 声明式导航 声明式导航是指通过在模版中通过 <Link/> 组件描述出要跳转到哪里去&#xff0c;比如后台管理系统的…

【LeetCode】---15.最小栈

【LeetCode】---15.最小栈 一、题目解析&#xff1a;二、算法原理&#xff1a;三、代码实现&#xff1a; 一、题目解析&#xff1a; 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初…

ARP学习及断网攻击

1.什么是ARP ARP&#xff08;Address Resolution Protocol&#xff09;是一种用于在IPv4网络中将IP地址映射到MAC地址的协议。在计算机网络中&#xff0c;每个网络接口都有一个唯一的MAC地址&#xff08;Media Access Control address&#xff09;&#xff0c;用于识别网络设备…

形态学图像处理

首先自己随便写了一个单词&#xff0c;然后在周围画一些相对细一点的噪声。 # 读取原始图片 original cv2.imread("romance.jpg") # 构造一个全1的5*5矩阵 kernel np.ones((5, 5), np.int8) 腐蚀 腐蚀&#xff08;Erosion&#xff09;是形态学图像处理中的一种基本…

Linux操作系统·进程管理

一、什么是进程 1.作业和进程的概念 Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用计算机系统&#xff1b;多任务是指Linux可以同时执行几个任务&#xff0c;它可以在还未执行完一个任务时又执行另一项任务。为了完成这些任务&#xff0c;系统上…

初识Linux -- Linux的背景和发展史介绍

点赞关注不迷路&#xff01;&#xff0c;本节涉及初识Linux&#xff0c;主要为背景介绍和xshell登录主机。 1.Linux背景 1.1 发展史 Linux从哪里来&#xff1f;它是怎么发展的&#xff1f;在这里简要介绍Linux的发展史。 要说Linux&#xff0c;还得从UNIX说起。 1.2 UNIX发…

水下机器人(ROV)中继器(TMS)究竟是个啥?

前段时间公众号后台有人问释放ROV的装置&#xff0c;由于只用过观察级ROV Valor&#xff0c;博主一直以为他说的是绞车&#xff0c;后来才明白他说的是中继器&#xff0c;在水中用来释放、控制和回收ROV的装置。 中继器TMS的全称是缆绳管理系统Tether Management System&#…

Linux基础——Linux开发工具(下)_make/makefile

前言&#xff1a;在经过前面两篇学习&#xff0c;大家对Linux开发工具都有一定的了解&#xff0c;而在此之前最重要的两个工具就是vim&#xff0c;gcc。 如果对这两个工具不太了解&#xff0c;可以先阅读这两篇文章&#xff1a; Linux开发工具 (vim) Linux开发工具 (gcc/g) 首先…

vue 时间轴页面 自己的写法 欢迎交流指正

<div class"first-box"><!--贯穿线--><div class"vertical-line-wrap"><div class"vertical-line"></div><div class"vertical-line-arrow"></div></div><!--开始--><div c…

多输入多输出 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机多输入多输出预测

多输入多输出 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机多输入多输出预测 目录 多输入多输出 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 Matlab实现WOA-LSSVM鲸鱼算法优化…