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

知识积累(五):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),然后计算损失
解决办法,分别看下面两图

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

相关文章:

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

文章目录 1. RNN1.1 缺点 2. Transformer2.1 组成2.2 Encoder2.2.1 Input Embedding&#xff08;嵌入层&#xff09;2.2.2 位置编码2.2.3 多头注意力2.2.4 Add & Norm 2.3 Decoder2.3.1 概览2.3.2 Masked multi-head attention 2.4 Transformer 模型的训练和推理2.4.1 训练…...

[Java、Android面试]_13_map、set和list的区别

本人今年参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料。 整理成了面试系列&#xff0c;由于时间有限&#xff0c;每天整理一点&#xff0c;后续会陆续分享出来&#xff0c;感兴趣的朋友可关注收…...

Linux进程管理:(六)SMP负载均衡

文章说明&#xff1a; Linux内核版本&#xff1a;5.0 架构&#xff1a;ARM64 参考资料及图片来源&#xff1a;《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址&#xff1a; zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 1. 前置知识 1.1 CPU管理位图 内核…...

计算机专业学生的成长之路:超越课堂的自我提升策略

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…...

财报解读:“高端化”告一段落,华住开始“全球化”?

2023年旅游业快速复苏&#xff0c;全球酒店业直接受益&#xff0c;总体运营指标大放异彩&#xff0c;多数酒店企业都实现了营收上的明显增长&#xff0c;身为国内龙头的华住也不例外。 3月20日晚&#xff0c;华住集团发布2023年四季度及全年财报。整体实现扭亏为盈&#xff0c;…...

Wifi环境下Unity开发iOS应用启动后HTTPS请求未弹出是否允许无线数据使用数据的弹窗

情况说明 笔者项目在首次启动&#xff0c;登录界面点击登录按钮会先HTTPS请求创建帐号&#xff0c;但是在WIFI网络下&#xff0c;请求后一直提示网络连接失败。但是切换到流量包后&#xff0c;则会弹出"无线数据"使用数据的弹窗&#xff0c;选择允许后则可顺利进入。…...

数据结构的概念大合集03(栈)

概念大合集03 1、栈1.1 栈的定义和特点1.2 栈的基础操作1.3 栈的顺序存储1.3.1 顺序栈1.3.2 栈空&#xff0c;栈满&#xff0c;进栈&#xff0c;出栈的基本思想1.3.3 共享栈1.3.3.1 共享栈的4要素 1.4 栈的链式存储1.4.1 链栈的实现1.4.2 链栈的4个要素 1、栈 1.1 栈的定义和特…...

C++ 哈希表

目录 两数之和 面试题 01.02. 判定是否互为字符重排 存在重复元素 存在重复元素 II 字母异位词分组 两数之和 1. 两数之和 思路1&#xff1a;两层for循环 思路2&#xff1a;逐步添加哈希表 思路3&#xff1a;一次填完哈希表 如果一次填完&#xff0c;那么相同元素的值&…...

C++之继承详解

一.继承基础知识 继承定义&#xff1a; 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保 持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象 程序设…...

C#装箱和拆箱

一&#xff0c;装箱 装箱是指将值类型转化为引用类型。 代码如下&#xff1a; 装箱的内部过程 当值类型需要被装箱为引用类型时&#xff0c;CLR&#xff08;Common Language Runtime&#xff09;会为值类型分配内存&#xff0c;在堆上创建一个新的对象。值类型的数据会被复…...

企业用大模型如何更具「效价比」?百度智能云发布5款大模型新品

服务8万企业用户&#xff0c;累计帮助用户精调1.3万个大模型&#xff0c;帮助用户开发出16万个大模型应用&#xff0c;自2023年12月以来百度智能云千帆大模型平台API日调用量环比增长97%...从一年前国内大模型平台的“开路先锋”到如今的大模型“超级工厂”&#xff0c;百度智能…...

linux 外部GPIO Watchdog驱动适配

前言 文章描述&#xff0c; 利用外部gpio看门狗芯片驱动芯片的复位功能。 芯片&#xff1a;RK3568 平台&#xff1a; Linux ubuntu.lan 4.19.232 #27 SMP Sat Sep 23 13:43:49 CST 2023 aarch64 aarch64 aarch64 GNU/Linux 硬件接线图示 看门狗芯片采用GPIO喂狗&#xff0c;W…...

活动回顾 | 走进华为向深问路,交流数智办公新体验

3月20日下午&#xff0c;“企业数智办公之走进华为”交流活动在华为上海研究所成功举办。此次活动由上海恒驰信息系统有限公司主办&#xff0c;华为云计算技术有限公司和上海利唐信息科技有限公司协办&#xff0c;旨在通过对企业数字差旅和HR数智化解决方案的交流&#xff0c;探…...

【Java】Oracle发布Java22最新版本

甲骨文&#xff08;ORACLE&#xff09;已经于2023年3月19日正式发布了最新版本的JDK&#xff0c;版本号&#xff1a;22 根据官方声明&#xff0c;Java 22 (Oracle JDK 22) 在性能、稳定性和安全性方面进行了数千种改进&#xff0c;包括对Java 语言、其API 和性能&#xff0c;以…...

Vue reactive函数的使用

let searchForm reactive({}); let data reactive({ isAdmin: true, isshowAccount: true }); reactive 是什么&#xff1f; reactive 是 Vue 3 Composition API 中的一个函数&#xff0c;用于创建一个包含响应式数据的对象。在 Vue 2.x 中&#xff0c;我们通常使用 data 选项…...

unity自动引用生成

using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using UnityEditor; using UnityEngine; using UnityEngine.UI;/// <summary> /// 模板脚本生成 /// </summary> public class ScriptCreater : EditorW…...

【Linux系统】线程互斥与同步

目录 一.几个概念 二.线程互斥 1.定义并初始化锁 2.加锁 3.解锁 4.销毁锁 三.互斥锁的本质 1.xchg的原子性 2.加锁的过程 3.解锁的过程 四.可重入VS线程安全 五.死锁 1.死锁的概念 2.具体实例 3.死锁产生的四个必要条件 4.解决或避免死锁 六.线程同步 七.…...

武汉星起航引领跨境电商新潮流,深耕亚马逊打造全方位合作新模式

在全球化的浪潮下&#xff0c;跨境电商已成为连接各国市场的重要桥梁&#xff0c;为无数企业带来了前所未有的发展机遇。在这一领域&#xff0c;武汉星起航电子商务有限公司以其独特的战略眼光和实战经验&#xff0c;成为引领行业发展的佼佼者。公司自2017年起便深耕亚马逊平台…...

GateWay路由规则

Spring Cloud GateWay 帮我们内置了很多 Predicates功能&#xff0c;实现了各种路由匹配规 则&#xff08;通过 Header、请求参数等作为条件&#xff09;匹配到对应的路由 1 时间点后匹配 server:port: 8888 spring:application:name: gateway-servicecloud:nacos:discovery:…...

shell脚本基础改造

一、基础的shell脚本格式 #!/bin/bash 2 #3 #********************************************************************4 #Author: LJH5 #QQ: 2…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

拟合问题处理

在机器学习中&#xff0c;核心任务通常围绕模型训练和性能提升展开&#xff0c;但你提到的 “优化训练数据解决过拟合” 和 “提升泛化性能解决欠拟合” 需要结合更准确的概念进行梳理。以下是对机器学习核心任务的系统复习和修正&#xff1a; 一、机器学习的核心任务框架 机…...