当前位置: 首页 > news >正文

[nlp入门论文精读] | Transformer

写在前面
 
最近工作从CV转向了NLP,于是空余时间便跟着哔哩哔哩李沐老师的视频学习。其实研一NLP课程讲论文的时候,我们小组就选择了经典的Attention和Bert,但还有很多细节并不完全理解,实际使用时也很困惑。
 
因此这个系列就来记录NLP复习知识!文章内容会结合工作实际所需持续更新。加油哇~

Transformer

        • 1. 简介和背景
        • 2. 相关工作
        • 3. 模型结构
          • 3.1 整体概览——编码器-解码器(Encoder-Decoder)
          • 3.2 注意力机制(Attention)
          • 3.3 "point-wise"前馈神经网络
          • 3.4 向量化层(Embedding)
          • 3.5 位置编码(Positional encoding)
        • 4. 为什么使用自注意力?(self-attention)
        • 5. 文章评价

1. 简介和背景
  • 论文的工作:聚焦于序列转录模型,序列转录模型是一类根据一个序列生成另外一个序列的模型,以往主流的方法通常基于RNN或者CNN、结构上采用Encoder-Attention-Decoder;提出的Transformer这种新的网络结构仅使用Attention机制。
  • RNN特点:能够处理序列数据的关键所在,是对输入序列从左到右依次进行计算,并将前面学到的知识放入隐藏状态向后传递
    • 这种计算机制带来的问题:
      • 无法并行计算
      • 当输入序列较长时,前面学到的知识在向后传递的过程中存在信息丢失的风险
    • 已有的提升计算效率的方法,如分解技巧,并不能从根本上解决问题
  • Attention机制在以往的工作中主要用来将Encoder的信息更好地传递给Decoder,论文提出的Transformer网络,不再使用循环层,仅使用attention学习输入和输出的全局依赖关系,而且能够有效进行并行计算

2. 相关工作
  • 减少时序计算代价途径之一——使用卷积神经网络
    • cnn的缺点在于难以建模长序列,每次计算使用的是k*k(k=3,5)的卷积核,如果需要建模两个距离较远的像素,需要使用多层卷积逐层计算;而Transformer中的注意力机制,每次计算使用全部像素;
    • 卷积的好处在于使用多个输出通道计算不同的特征,所以设计多头注意力机制进行模拟。
  • 自注意力机制:在计算一个序列表达时,将序列不同位置关联起来的一种注意力机制;已有工作并非论文创新。

3. 模型结构
3.1 整体概览——编码器-解码器(Encoder-Decoder)

Transformer基于经典序列转录模型的Encoder-Decoder架构:

  • 长度为n的输入x=(x_1, x_2,…x_n),如果是一个句子,x_t表示第t个单词
  • 编码器E:将输入映射为长度同样为n的连续向量z=(z_1, z_2,…z_n)
  • 解码器D:以编码器的输出z为输入,生成长度为m的输出序列y=(y_1, y_2, …y_m)
    • m可以不等于n,例如英翻中任务中,输入的英文句子长度可以不等于输出的中文句子长度
    • 解码器是典型的自回归模型,即逐步生成序列的每个元素来生成整个序列,生成y_t时考虑已经生成的y_1到y_(t-1),过去时刻的所有输出作为当前时刻的输入
      同时在编码器和解码器堆叠了多层self-attention、norm和fc

在这里插入图片描述

  1. 编码器
    在这里插入图片描述
  • batchnorm和laynorm
    在这里插入图片描述
  1. 解码器
  • 与编码器结构相似,包含6个完全相同的层,每层除了与编码器相同的两个子层(多头自注意力和前馈神经网络)外,增加一个额外的子层,同样是多头注意力
  • 由于解码器预测t时刻输出时,只能使用0到t-1时刻的输出作为输入,而t时刻后的不能;但注意力机制每次可以看到完整输入;因此使用带掩码的注意力机制–>保证训练和测试一致。
3.2 注意力机制(Attention)

简要理解:注意力函数将输入的 query,key-value 映射为输出output;具体来说,输出是value的加权和(二者维度相同),权重由query和key的相似度函数计算得出。其中不同的相似度函数则对应不同的注意力机制。

  1. 点乘注意力(Scaled dot attention)——TransFormer中使用的注意力机制
    在这里插入图片描述
  • quey的个数可以和kye-value对的个数不一样,但维度相同
  • 为什么要做缩放?当d_k较大时,点乘的值会变大,对应的softmat结果靠近1,使得梯度比较小
  • mask的目的——避免t时刻的query看到t时刻之后的key-value对;具体计算时,将t时刻之后的qk设置成较大的负数,经过softmax计算后变成0
  1. 多头注意力(Multi-Head attention)
    目的:模拟卷积神经网络不同输出通达学习不同特征
    做法:将QKV先投影到低维空间,投影h次–>缩放的点乘注意力机制–>拼接之后投影到原维度
    在这里插入图片描述

  2. Transformer中三种不同的注意力
    (1)Encoder中
    在这里插入图片描述
    (2)Dncoder中
    第一个注意力机制与Encoder相似,增加了mask机制:预测t时刻输出时,t时刻之后的权重设置为0
    第二个不再是自注意力,key-value对来自编码器的输出
    在这里插入图片描述

3.3 "point-wise"前馈神经网络
  • point-wise的意思:输入序列每个位置的词语都会经过相同的前馈神经网络计算
  • 两个线性层,使用Relu激活函数,将512维输入映射到2048维度后再映射回512维
  • 为什么是point-wise?注意力子层已经把输入的整个句子信息做了一次汇聚,使得注意力层输出的每个向量中都融合了其他位置信息(权重不同,感兴趣信息不同),因此每个位置词语对应的注意力子层输出向量可以单独进入前馈神经网络进行计算。
    在这里插入图片描述
3.4 向量化层(Embedding)
  • 整个网络包括三个向量化层,分别在编码器输入、解码器输入和解码器输出softmax层前。三者共享权重(训练简单)
  • 在编码器和解码器的输入部分,目的是将输入词映射成d_model向量;在解码器的输出部分,则是将隐藏状态的向量(eg:512维)映射到词汇表大小(eg:3万)的维度空间,然后进入softmax函数计算每个词概率值。

补充chatgpt的解释: Q:在decoder的softmax之前也会embedding,这是为什么呢?
A:在Transformer解码器中,在进行softmax之前进行额外的嵌入操作,通常是因为需要将解码器的输出(即经过softmax后的概率分布)转换为最终的词汇预测。这个额外的嵌入操作通常被称为"输出投影"(output
projection)或者"生成词嵌入"(generation embedding)。 这个额外的嵌入操作的作用有几个方面:

  1. 维度匹配:通常情况下,解码器的隐藏状态的维度可能与词汇表的大小不匹配。因为在解码器的隐藏状态中,每个时间步都有一个隐藏状态向量,而词汇表的大小通常远大于隐藏状态的维度。所以,需要通过输出投影将隐藏状态的维度转换为词汇表大小,以便之后进行softmax计算得到每个词汇的概率分布。
  2. 生成词嵌入:除了维度匹配之外,输出投影还可以被看作是将隐藏状态映射到词嵌入空间的过程。通过这个过程,模型可以更好地捕捉输出词汇的语义信息,从而更准确地预测下一个词汇。
    综上所述,在Transformer解码器中,在进行softmax之前进行额外的嵌入操作,既可以保证维度匹配,又可以提高模型对输出词汇的表示能力,从而提高预测的准确性。
3.5 位置编码(Positional encoding)
  • RNN是通过将上一时刻输出作为下一时刻输入来编码序列信息的,但注意力却缺少对时序信息的编码,针对这个问题,Transformer选择直接在输入中加入词语的位置信息。
  • 位置编码是一个与位置相关的向量,它被加到词嵌入向量中,以使模型能够区分不同位置的词汇。它通过周期不同的正弦、余弦函数计算而得,使得每个位置都会有一个唯一的位置编码向量与之对应。
4. 为什么使用自注意力?(self-attention)

虽然论文中这个章节标题是why self-attention,但并不是解释为什么这么设计,而是侧重时间复杂度、并行程度等相比RNN和CNN的优势
在这里插入图片描述

衡量三个维度

  • 每层的时间复杂度
  • 顺序计算:下一步计算必须等前面多少步完成计算,值越低并行程度越高
  • 最大路径长度:信息从一个点到另一个点要走多少步
    (1) 自注意力层:query矩阵n行d列,key矩阵n行d列,二者时间复杂度是n^2d;query和所有的key计算,输出是所有value的加权和,所以query一次就可以完成所有key-value计算,同时矩阵之间并行运算,所以每一步无需等待,信息传输一次完成。
    剩余三者计算量再补充

TODO:剩余循环层和卷积层计算之后遇到实际场景后再补充


5. 文章评价

论文写作:正文精简讲好一个故事,为什么要做?设计理念是什么?思考–>增加文章深度
模型本身:几乎可以用于所有NLP任务;扩展到图像、语音等领域;预训练让整个训练过程变的简单


2024.03.09 春日伊始,阳光明媚;在北京的小破出租屋,第一次更新:论文中Transformer基本结构。

相关文章:

[nlp入门论文精读] | Transformer

写在前面 最近工作从CV转向了NLP,于是空余时间便跟着哔哩哔哩李沐老师的视频学习。其实研一NLP课程讲论文的时候,我们小组就选择了经典的Attention和Bert,但还有很多细节并不完全理解,实际使用时也很困惑。 因此这个系列就来记…...

科技回顾,飞凌嵌入式受邀亮相第八届瑞芯微开发者大会「RKDC2024」

2024年3月7日~8日,第八届瑞芯微开发者大会(RKDC2024)在福州举行,本届大会以“AI芯片AI应用AloT”为主题,邀请各行业的开发者共启数智化未来。 本届大会亮点颇多,不仅有13大芯片应用展示、9场产品和技术论坛…...

代码随想录算法训练营第五十九天丨503. 下一个更大元素 II、42. 接雨水

503. 下一个更大元素 II 还是比较容易想的,扩展数组一倍即可。 class Solution:def nextGreaterElements(self, nums: List[int]) -> List[int]:extended_nums nums * 2n len(nums)mono []res [- 1] * nfor i, num in enumerate(extended_nums):while mono…...

全代码分享|R语言孟德尔随机化怎么做?TwoSampleMR包MR一套标准流程

文章目录 1.前言1.1 成立条件1.2 三大要素1.3 统计原理 2.demo2.1 加载R包2.2 主要MR分析2.3 MR补充分析、多态性、验证 2.4 结果可视化 1.前言 孟德尔随机化(Mendelian randomization,MR)是一种利用基因变异作为工具变量来评估暴露与结果之间因果关系的统计方法。…...

【AI视野·今日NLP 自然语言处理论文速览 第八十四期】Thu, 7 Mar 2024

AI视野今日CS.NLP 自然语言处理论文速览 Thu, 7 Mar 2024 Totally 52 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers The Heuristic Core: Understanding Subnetwork Generalization in Pretrained Language Models Authors Adith…...

英伟达推出免训练,可生成连贯图片的文生图模型ConsiStory,生成角色一致性解决新方案

目前,多数文生图模型皆使用的是随机采样模式,使得每次生成的图像效果皆不同,在生成连贯的图像方面非常差。 例如,想通过AI生成一套图像连环画,即便使用同类的提示词也很难实现。虽然DALLE 3和Midjourney可以对图像实现…...

Jmeter 性能 —— 50TPS与秒杀分析!

1、50tps——5tps分析 50tps基本上已经满足了大部分中小型企业要求了 需求:期望我项目的接口,都要能满足50tps? 算 50tps:50 个事务每秒50 t/s 1分钟:50\*60s 3000 事务1小时 3000 \* 60 180000 事务 1小时要处理…...

【前端】如何计算首屏及白屏时间

文章目录 一、首屏时间二、白屏时间 一、首屏时间 白屏时间&#xff1a;页面渲染完所有内容的时间 简单点就是在<body> 标签后写js代码计算&#xff0c;但是不是很准确 <head><title>白屏时间</title> </head> <body></body> <s…...

重学SpringBoot3-ServletWebServerFactoryAutoConfiguration类

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-ServletWebServerFactoryAutoConfiguration类 工作原理关键组件以TomcatServletWebServerFactory为例ServletWebServerFactory会创建webServer的时机关键…...

FileZillaClient连接被拒绝,无法连接

1.ECONNREFUSED - 连接被服务器拒绝 2、无法连接FZ时&#xff0c;判断没有ssh 更新源列表&#xff1a; sudo apt-get update 安装 openssh-server &#xff1a;sudo apt-get install openssh-server 查看是否启动ssh&#xff1a;sudo ps -e | grep ssh...

每日一面——成员初始化列表、移动构造和拷贝构造

写前声明&#xff1a;参考链接 C面经、面试宝典 等 ✊✊✊每日一面——成员初始化列表、移动构造和拷贝构造 一、类成员初始化方式&#xff1f;构造函数的执行顺序&#xff1f;为什么用成员初始化列表会快一些&#xff1f;二、final和override关键字三、拷贝初始化和直接初始化…...

OPC UA 服务器的Web访问

基于Web 的应用非常普及&#xff0c;例如基于web 的SCADA &#xff0c;物联网 Dashboard 等等&#xff0c;那么基于Web 的应用如何访问OPC UA 服务器呢&#xff1f;本博文讨论这方面的问题。 Web 的通信方式 Web 是我们通常讲的网站&#xff0c;它由浏览器&#xff0c;HTTP 服…...

docker 子网

当需要给容器分配指定 ip &#xff0c;为避免ip 冲突&#xff0c;指定容器子网处理 创建 subnet 子网 docker network create --subnet 10.0.0.0/24 --gateway 10.0.0.1 subnet-testdocker network ls NETWORK ID NAME DRIVER SCOPE ... f582ecf297bc sub…...

QT使用RabbitMQ

文章目录 1.RabbitMQ 客户端下载地址:1.1RabbitMQ基本结构:2.搭建RabbitMQ server3.安装步骤4.运行4.1 报错问题解决5.使用5.1 配置Web管理界面6.常用命令总结7.Qt客户端编译7.1 这里重点强调一下,这个文件需要改成静态库7.2 下载地址:(qamqp自己下载,下载成功后,静态编译…...

什么是R语言?什么是R包?-R语言001

R语言是一种专为统计计算和图形而设计的编程语言和环境。它最初由罗斯伊哈卡和罗伯特亨特尔在1993年创建&#xff0c;灵感来源于S语言。R语言已经发展成为统计学、数据分析、科学研究以及许多其他领域中最受欢迎和广泛使用的工具之一。R语言的核心是一个开源的解释型语言&#…...

Java17 --- springCloud之LoadBalancer

目录 一、LoadBalancer实现负载均衡 1.1、创建两个相同的微服务 1.2、在客户端80引入loadBalancer的pom 1.3、80服务controller层&#xff1a; 一、LoadBalancer实现负载均衡 1.1、创建两个相同的微服务 1.2、在客户端80引入loadBalancer的pom <!--loadbalancer-->&…...

Mac(含M1) 使用 brew 安装nvm

目录 Mac 安装nvm 下载命令 配置环境变量 刷新 Mac(M1) 安装nvm 搜索 下载 为nvm创建文件夹 配置环境变量 刷新 Mac 安装nvm 下载命令 brew install nvm 配置环境变量 vi ~/.zshrc 内容如下&#xff1a; export NVM_DIR"$HOME/.nvm"[ -s "/usr/local…...

优秀的前端框架vue,原理剖析与实战技巧总结【干货满满】

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属的专栏&#xff1a;前端零基础教学&#xff0c;实战进阶 景天的主页&#xff1a;景天科技苑 文章目录 Vuevue.js库的基本使用vue.js的M-V-VM思…...

<2024最新>ChatGPT逆向教程

前言 在使用本篇文章用到的项目以及工具时,需要对其有一定的了解,无法访问以及无法使用的问题作者不承担任何责任,可以自行想办法解决遇到的问题​。 文章若有不合适,有问题的地方,请私聊指出,谢谢~ 准备工具 一台至少 2 核 2G 内存的服务器,推荐是位于香港、新加坡或…...

C#编程技巧--2

1.使用泛型: 泛型允许你编写更加灵活和可重用的代码&#xff0c;同时提高类型安全性。 C# 中的泛型功能允许你编写更加灵活和可重用的代码&#xff0c;并且可以增加类型安全性。通过使用泛型&#xff0c;你可以编写适用于不同类型的代码&#xff0c;而无需为每种类型单独重写代…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...

32单片机——基本定时器

STM32F103有众多的定时器&#xff0c;其中包括2个基本定时器&#xff08;TIM6和TIM7&#xff09;、4个通用定时器&#xff08;TIM2~TIM5&#xff09;、2个高级控制定时器&#xff08;TIM1和TIM8&#xff09;&#xff0c;这些定时器彼此完全独立&#xff0c;不共享任何资源 1、定…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...

WebRTC调研

WebRTC是什么&#xff0c;为什么&#xff0c;如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...