知识积累(五):Transformer 家族的学习笔记

文章目录

  • 1. RNN
    • 1.1 缺点
  • 2. Transformer
    • 2.1 组成
    • 2.2 Encoder
      • 2.2.1 Input Embedding(嵌入层)
      • 2.2.2 位置编码
      • 2.2.3 多头注意力
      • 2.2.4 Add & Norm
    • 2.3 Decoder
      • 2.3.1 概览
      • 2.3.2 Masked multi-head attention
    • 2.4 Transformer 模型的训练和推理
      • 2.4.1 训练
      • 2.4.2 推理
      • 2.4.3 与 RNN 相比的优势
  • 3. 复习
    • 3.1 Language model
      • 3.1.1 训练
      • 3.1.2 推理
    • 3.2 Transformer 架构(Encoder)
      • 3.2.1 嵌入向量
      • 3.2.2 位置编码
      • 3.2.3 自注意力和 causal mask
  • 4 BERT
    • 4.1 左右 context 的重要性
    • 4.2 BERT 预训练
      • 4.2.1 Masked Language Model task
      • 4.2.2 Next Sentence Prediction task
    • 4.3 BERT 微调
      • 4.3.1 文本分类任务
      • 4.3.2 问答任务



1. RNN

1.1 缺点

1)对于长序列,计算速度慢
2)梯度消失或梯度爆炸(由于链式法则来更新参数,随着计算长度的增加,越小的越小,梯度消失;越大的越大,梯度爆炸)
3)难以获得很长时间之前的信息
在这里插入图片描述

2. Transformer

在这里插入图片描述

2.1 组成

三部分:encoder + decoder + decoder上面的 linear 层

2.2 Encoder

2.2.1 Input Embedding(嵌入层)

请添加图片描述

请添加图片描述

1)嵌入流程
a)将输入进行 tokenizer ,
b)每个 token 映射到单词表中的 token-id
c)每个 id 对应的 embedding(vector size模型有关,传统 Transformer 是512,Bert 是 768)
Ps:token-id 是固定的。但是 Embedding 中的数字是不固定的,值随模型训练而改变

2.2.2 位置编码

请添加图片描述
在这里插入图片描述
在这里插入图片描述

1)什么是位置编码?
a)我们想要 word 带有一些它在句子中的位置信息
b)我们想要模型区分对待离得近的单词,和离得远的单词(因为离得近可能语义上更接近等等原因)
c)希望模型能够学到位置编码带来的 pattern

2)位置编码的特点
a)embedding + position embedding = encoder input
b)position embedding 只计算一次,然后在训练和测试期间使用

2.2.3 多头注意力

在这里插入图片描述

在这里插入图片描述

1)什么是 self-attention?(单头)
a)self-attention 允许模型将单词关联起来
如上图 Q * KT 所示,Q 和 K 维度和单词的嵌入矩阵相同(也就是前面 embedding + position embedding)。
Ps:注意只是维度相同,Q K V 矩阵里面的参数应该是随机初始化的。
所以图中红色框的矩阵第一行中每个元素的含义可以看作单词 “your” 与其他单词之间的关系强弱。
b)再乘以 V 之后得到的矩阵,每个向量嵌入里面包含:语义嵌入、位置信息、与其他单词的交互(下图)

在这里插入图片描述
2)self-attention 的一些细节
a)具有排列不变性
eg:输入序列 ABCD 或者序列 ACBD。
其中 BC 的位置交换了,但是最终得到的 B 和 C 的嵌入向量也对应位置交换,向量值是不变的。
b)前面举例的 self-attention 不需要参数。截止到现在的笔记,单词之间的交互只由他们的 embedding 和 position embedding 驱动,后面的笔记会发生改变。
c)Q 和 K 相乘得到的矩阵对角线的值应该是最大的
d)如果我们不想让某些位置交互,可以在使用 softmax 之前,将他们两者对应的值设为 -∞,那么经过 softmax 之后那里的值就变成了0。decoder 中可以使用(eg:想取消“your” 和 “cat” 的交互,就将第一行第二列设置为 0)

3)多头注意力
在这里插入图片描述
在这里插入图片描述
1)如下图所示,最初的 Q、K、V 就是经过positional encoding 的输入,也就是图中蓝色 input 的 copy。分别乘以不同的参数矩阵后,才变成不同的东西
2)其中,注意力头的个数是 h。每个注意力头对应的矩阵(seq,dv),这里dv = dmodel / h。(其中dmodel就是模型vector size)
3)不同头对应的现实含义即,不同的头可能会捕获某个单词的不同含义,不如图中单词图中,某个单词指向了很多的词,那该单词会有多种词义,这些不同的词义就是由不同的注意力头来捕获的

为什么这三个矩阵被称作 Q、K、V?
在这里插入图片描述
eg:以 python 字典的视角来看,图中的 query、keys 和 values 都是被表示成向量。通过 q 与 k 的运算,实际上是找与 “love” 这种类型的电影最相似的电影,最终 “romantic” 可能是最相似的。

2.2.4 Add & Norm

在这里插入图片描述

在这里插入图片描述
1)什么是 layer normalization?
对于一个batch中的所有item进行独立的归一化,利用均值和方差公式

2.3 Decoder

在这里插入图片描述

2.3.1 概览

1)首先 output embedding 和 positional encoding,与输入的时候类似
2)经过 masked multi-head attention (这里是decoder的self-attention)得到的是下一次multi-head attention的query
3)encoder 输出以 keys 和 values 的方式传入multi-head attention,querys是decoder。(这里是encoder 和 decoder 的cross-attention)

2.3.2 Masked multi-head attention

在这里插入图片描述

在这里插入图片描述

1)使用 masked 的意思是说,在输出的时候,一个词只能根据前面的词输出,而不能看到后面的词
2)也就是图中对角线上方的元素在softmax之前全为-无穷
3)而获取这个矩阵是Q 和 K 的运算来得到的
4)所以只能使用 decoder 的 query 矩阵,而用 encoder 的 key 矩阵

2.4 Transformer 模型的训练和推理

以翻译任务为例

2.4.1 训练

在这里插入图片描述
1)encoder输入:<sos> i love you very much <eos>
2)decoder输入:<sos> ti amo molto
decoder输出:ti amo molto <eos>
Ps:由于这种 masked 机制,所以可以一次性输入,输出的 ti 是根据\<sos>获得,输出的 amo 是根据\<sos> ti 获得,以此类推
PPs:当然,除了上面的单词输入,decoder 需要补全 token 来补充其模型需要的输入长度

2.4.2 推理

1)第一步:输入 <sos>,输出 ti
(需要进行 encoder 和 decoder 的计算)
2)第二步:输入<sos> it,输出 amo
(因为encoder不变,所以不用计算encoder,只计算decoder)
3)第三步:输入<sos> it amo ,输出 molto
(因为encoder不变,所以不用计算encoder,只计算decoder)
4)第四步:输入<sos> it amo molto,输出 <eos>
(因为encoder不变,所以不用计算encoder,只计算decoder)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

推理策略
通常使用 beam search,而不是贪婪搜索
在这里插入图片描述

2.4.3 与 RNN 相比的优势

RNN对于长序列时间长,而 Transformer 的所有的输入都是在同一时间输入完成的,使得训练长序列变得简单和快速。

3. 复习

3.1 Language model

在这里插入图片描述

什么是语言模型 language model ?
语言模型是一个概率模型,预测一个 word 出现的概率。
eg:china 这个 word 出现在 shanghai is a city in 后面的概率。

3.1.1 训练

在这里插入图片描述

3.1.2 推理

在这里插入图片描述
在这里插入图片描述
Ps:感觉应该是生成式模型
  输入[SOS],输出 Before
  接着输入 Before ,输出 my
  ······,以此类推
  最后输入 bright,输出 [EOS]

3.2 Transformer 架构(Encoder)

3.2.1 嵌入向量

在这里插入图片描述

在这里插入图片描述
为什么使用向量来表示 word ?
1)希望具有相近含义的 word 在向量空间中更接近
2)这里的接近使用余弦相似度来衡量,或者是点积(dot product)

(不同模型用到的 tokenizer:
LLama 使用 Byte-Pair Encoding tokenization
Bert 使用 WordPiece tokenization)

3.2.2 位置编码

在这里插入图片描述
在这里插入图片描述

3.2.3 自注意力和 causal mask

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Self-attention(自注意力)
1)所以这里的 query、key、value,都是 encoder 输入矩阵的 copy 版本
Ps:翻译任务中会用到 cross-attention
2)causal mask 使得 word 只能 “看到” 出现在它之前的 word
3)而 Bert 能够看到前后的 context

在这里插入图片描述

因为 token 只能看到它之前的 token
所以 QK转置 * V 的时候,第一个 token [SOS] 只能与 V 矩阵的第一行相乘(因为后面的元素全是0)
也就是 [SOS] 只有与自己 interaction
后面以此类推,Before 只能与 [SOS] 和 Before interaction

4 BERT

1)允许的最大 input token 数量是 512,但是 token 的嵌入维度(base768,large1024)
2)positional embedding 是训练期间习得的
在这里插入图片描述
在这里插入图片描述
1)bert 不能处理带有 prompt 的任务
2)bert 使用 left 和 right context 进行训练
3)bert 不能文本生成
4)bert 没有经过 next token预测(生成任务),但是经过了 masked language model 和 next sentence prediction

在这里插入图片描述
Bert 和 生成模型 使用方式的不同:
1)生成模型通过“上下文” + 提示工程
2)Bert 通过预训练 + 具体任务fine tune

4.1 左右 context 的重要性

在这里插入图片描述

4.2 BERT 预训练

4.2.1 Masked Language Model task

在这里插入图片描述

MLM 任务细节: 1)随机挑选一个 token,80% 概率用 [MASK] 替换,10% 概率用随机 token 替换,10% 概率不变

在这里插入图片描述

4.2.2 Next Sentence Prediction task

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

NSP 任务细节:
1)给定句子 A 和 B,判断 B 是不是 A 的下一句话
2)除了传统的 token embedding + positional embedding,还有 segment embedding(表征 token 属于哪个句子)
3)NSP 是一个分类任务,CLS 的输出进行二分类 IsNext or NotNext
4)CLS token 通过Q*K转置,可以看作捕获了所有 token 的信息

4.3 BERT 微调

4.3.1 文本分类任务

和上面的 NSP 任务类似,就是分类

4.3.2 问答任务

任务设定:给定 context + question,输出 answer
1)Bert 需要知道输入里面哪一部分是 context,哪一部分是 question
2)Bert 需要给出 answer 的开始和结束 token:线性层输出两个(起始token和结束token),然后计算损失
解决办法,分别看下面两图

请添加图片描述
请添加图片描述

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

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

相关文章

C语言学习过程总结(16)——指针(4)

一、数组名的理解 我们直接使用%p打印出地址来看看&arr【0】 和 arr的不同&#xff1a; int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };printf("&arr[0] %p\n", &arr[0]);printf("arr %p\n", arr);} 、 很容易看出来两者的输出…

ES模块化

Node.js默认并不支持ES模块化&#xff0c;如果需要使用可以采用两种方式。方式一&#xff0c;直接将所有的js文件修改为mjs扩展名。方式二&#xff0c;修改package.json中type属性为module。 导出 默认导出 // 向外部导出内容 export let a 10 export const b "孙悟空…

数据分析 | NumPy

NumPy&#xff0c;全称是 Numerical Python&#xff0c;它是目前 Python 数值计算中最重要的基础模块。NumPy 是针对多维数组的一个科学计算模块&#xff0c;这个模块封装了很多数组类型的常用操作。 使用numpy来创建数组 import numpy as npdata np.array([1, 2, 3]) print…

Unity中UGUI中的PSD导入工具的原理和作用

先说一下PSD导入工具的作用&#xff0c;比如在和美术同事合作开发一个背包UI业务系统时&#xff0c;美术做好效果图后&#xff0c;程序在UGUI中制作好界面&#xff0c;美术说这个图差了2像素&#xff0c;那个图位置不对差了1像素&#xff0c;另外一个图大小不对等等一系列零碎的…

文件包含漏洞(input、filter、zip)

一、PHP://INPUT php://input可以访问请求的原始数据的只读流&#xff0c;将post请求的数据当作php代码执行。当传入的参数作为文件名打开时&#xff0c;可以将参数设为php://input,同时post想设置的文件内容&#xff0c;php执行时会将post内容当作文件内容。从而导致任意代码…

ngnix安装配置

通过yum -y install nginx的方式&#xff0c;有时候会出现No package nginx available的报错。迟迟无法解决。此时要通过下载安装包的方式安装。 1、下载安装包&#xff1a;官方网址 2、解压缩&#xff1a; tar -xzvf nginx-1.23.4.tar.gz cd nginx-1.23.4.tar.gz 3、源码包…

pycharm里test connection连接成功,但是无法同步服务器文件,deployment变灰

如果服务器test connection连接成功&#xff0c;但是无法同步文件。 可以尝试以下方式&#xff1a; 点击tools-deployment-browse remonte host&#xff0c;选择要连接的服务器的文件夹 如果能正常显示服务器文件夹&#xff0c;再点击tools-deployment&#xff0c;注意要把要…

echarts设置柱形图柱间距离

不同系柱形图柱间距离&#xff08;barGap&#xff09; {type: bar,itemStyle: {normal: {color: #ddd}},silent: true,barWidth: 40,barGap: 10%, //设置负值 不同系的柱形图会实现重叠效果data: [60, 60, 60, 60] },同系柱形图柱间距离&#xff08;barCategoryGap&#xff…

谈谈对数据库索引的认识

索引的概念 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。 可以对表中的一列或多列创建索引&#xff0c;并指定索引的类型&#xff0c;各类索引有各自的数据结构实现。 索引的作用 默认情况下&#xff0c;进行条件查询操作&#xff0c;就是遍历表&a…

27. 移除元素 (Swift版本)

题目描述 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出…

【蓝桥杯每日一题】填充颜色超详细解释!!!

为了让蓝桥杯不变成蓝桥悲&#xff0c;我决定在舒适的周日再来一道题。 例&#xff1a; 输入&#xff1a; 6 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1 输出&#xff1a; 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 2 2 1 1 1 2 2 2 1 1 2 2 2 2 1 1…

渐开线花键环规的几种加工方法

小伙伴们大家好&#xff0c;今天咱们聊一聊渐开线花键环规的几种加工方法。 渐开线花键环规是在汽车、摩托车以及机械制造工业应用非常广泛的一种检测量具。它属于是一种内花键齿轮&#xff0c;其精度和表面粗糙度要求都比较高。采用的加工方法也比较多&#xff0c;下面详细看…

Spring MVC文件上传配置

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 文件上传 Spring MVC文件上传基于Servlet 3.0实现&#xff1b;示例代码如下&#xff1a; Overrideprotected void customizeRegistration(ServletRegistration.Dynamic reg…

C语言-memcpy(不重复地址拷贝 模拟实现)

memcpy&#xff08;不重复地址拷贝&#xff09; 语法格式 在C语言中&#xff0c;memcpy 是一个标准库函数&#xff0c;用于在内存之间复制数据。它的原型定义在 <string.h> 头文件中。memcpy 的语法格式如下&#xff1a; c void *memcpy(void *destination, const voi…

2024全新返佣商城分销商城理财商城系统源码 全开源PHP+VUE源码

2023全新返佣商城分销商城理财商城系统源码 全开源PHPVUE源码 程序安装环境要求&#xff1a; nginx1.16 php7.2 mysql5.6 程序全开源PHPVUE源码 有需要测试的老铁&#xff0c;拿去测试吧

KKVIEW远程: 安卓免费远程控制软件

安卓免费远程控制软件&#xff1a;方便、实用且高效 在数字化日益增长的今天&#xff0c;远程控制软件正变得越来越重要。无论是在家庭环境还是工作环境中&#xff0c;它们都能为我们提供便利。特别是在移动设备上&#xff0c;如安卓设备&#xff0c;这种需求更为明显。幸运的是…

基于高斯模型的运动目标检测(车辆检测),Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

RTC协议与算法基础 - RTP/RTCP

首先&#xff0c;需要说明下&#xff0c;webrtc的核心音视频传输是通过RTP/RTCP协议实现的&#xff0c;源码位于src/modules/rtp_rtcp目录下&#xff1a; 下面让我们对相关的内容基础进行简要分析与说明&#xff1a; 一、TCP与UDP协议 1.1、TCP协议 TCP为了实现数据传输的可…

C到C++的敲门砖-2

文章目录 引用内联函数auto关键字基于范围的for循环指针空值nullptr后记 引用 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空 间&#xff0c;它和它引用的变量共用同一块内存空间。 所谓引用就是给变量起别名&am…

uwsgi+nginx+django 部署学习

收集静态文件及部署配置 DEBUG False STATICFILES_DIRS [os.path.join(BASE_DIR, "static"), ] STATIC_ROOT /data/static python3 manage.py collectstatic 收集静态文件&#xff0c;成功后可在STATIC_ROOT目录查看 安装依赖 pip3 install uwsgi django项目结…