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

transformer(李宏毅老师系列)

自学参考:
Transformer:Attention Is All You Need
Transformer论文逐段精读
视频课
课件+资料
笔记

一、引入

  • seq2seq:输入一个序列的向量作为input,output的长度由机器自己决定
  • seq2seq model应用:
    • 语音辨识
      输入是声音讯号的一串vector
      输出是语音辨识结果,即声音讯号对应的文字,输出长度由机器自行决定
      在这里插入图片描述

    • 机器翻译
      输入一种语言的句子,长度为N
      输出另一种语言的句子,长度为N’,N和N’之间的关系由机器自行决定
      在这里插入图片描述

    • 语音翻译
      输入一种语言的语音
      输出另一种语言的文字
      不能用以上两种简单拼接,因为很多语言并没有对应的文字(例如一些方言)
      在这里插入图片描述

    • 语音合成Text-to-Speech (TTS) Synthesis
      输入文字
      输出声音讯号
      在这里插入图片描述

    • 聊天机器人Chatbot
      输入和输出都是文字,利用人的对话进行train
      在这里插入图片描述

    • 问答系统Question Answering (QA)
      输入和输出都是文字序列
      许多nlp任务,都可以解读为QA任务,例如翻译、摘要、情感分析。而QA问题就可以用seq2seq model来解决
      在这里插入图片描述

    • 语法分析Syntactic Parsing
      树状结构也可以视为一个sequence,从这个角度切入语法分析问题也可以视为:
      输入一个语句
      输出一个代表语法分析树的序列
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    • 多标签分类multi-label classification

      • multi-class classification:从多个class里为样本选某一个class
      • multi-label classification:同一个样本,可属于多个class
        在这里插入图片描述
    • 实体检测Object Detection
      在这里插入图片描述

二、 seq2seq’s model =Encoder + Decoder

在这里插入图片描述

encoder

输入一排向量(序列)
输出另一排同样长度的向量(序列)
可使用self-attention、RNN、CNN
在这里插入图片描述

  • 进一步分析,每个block都包含若干层(例如下图中是self-attention&FC)
    每个block输入一排向量,输出一排向量
    在这里插入图片描述
  • 在transformer中:
    在这里插入图片描述
    在送入block前,要先进行positional encoding
    在这里插入图片描述
  • 每个block中的架构为
    • multi self-attention
    • residual connection:把这个vector加上其input作为output(残差网络)
    • layer normalization:对同一个feature,同一个example,不同的dimension,计算mean和standard deviation

    区别:batch normalization:是对不同example,不同feature的同一个dimension,计算mean跟standard deviation

    • FC network也有residual架构
    • 把residual结果再做一次layer normalization得到的输出才是residual network里一个block的输出

decoder

以Autoregressive Decoder为主(AT)

  1. 向decoder输入encoder产生的向量

  2. 在decoder可能产生的文字里多加一个特殊字符BEGIN(BOS,begin of sentence)。在nlp问题中,每个token用一个one-hot的vector来表示,其中一维是1,其他全0,而BEGIN也用one-hot vector表示

  3. decoder输出的一个向量长度和vocabulary size(取决于输出的单位。本例中输出中文,则size是中文方块字的数目)一样。在产生这个向量前,跑一个softmax,分数最高的一个中文字,即为最终的输出
    在这里插入图片描述

  4. 把“机”作为decoder新的input,原来decoder的输入有BEGIN和“机”;
    根据这两个输入,输出一个蓝色的向量;
    根据这个蓝色的向量里给每一个中文的字的分数,来决定第二个输出,再作为输入,继续输出后续的字,以此类推……
    decoder会把自己的输出作为接下来的输入之一,当decoder看到错误的输入,再被decoder自己吃进去,可能会造成error propagation,一步错步步错
    ⇒解决:teacher forcing技术
    在这里插入图片描述

  5. 机器自行决定输出的长度:特别符号END(EOS)
    在这里插入图片描述
    在这里插入图片描述

  • 在transformer中,除了中间部分,encoder和decoder没有太大的差别。最后部分,可能会再做一个softmax,使得它的输出变成一个概率分布
    在这里插入图片描述
  • Masked self-attention:产生输出时,不能再看”右边“的部分
    ⇒因为实际上就是顺次产生的
    在这里插入图片描述
    Non-autoregressive (NAT)
    NAT不是依次产生,而是一次吃的是一整排的 BEGIN 的 Token,把整个句子一次性都产生出来
    问题:如何确定BEGIN的个数?
    • 方法①: 另外训练一个 Classifier,吃 Encoder 的 Input,输出是一个数字,代表 Decoder 应该要输出的长度,
    • 方法②:给它一堆 BEGIN 的 Token,(比如输出的句子的最大长度长度,不超过 300),给它 300 个 BEGIN,然后就会输出 300 个字。什麼地方输出 END表示这个句子结束。

NAT的好处:

  1. 并行化。NAT 的 Decoder 不管句子的长度如何,都是一个步骤就产生出完整的句子,所以在速度上,NAT 的 Decoder 比AT 的 Decoder 要快,
  2. 容易控制输出长度。

常用在语音合成:有一个 Classifier决定 NAT 的 Decoder 应该输出的长度,并以此调整语音的速度。比如,要让你的系统讲快一点,那你就把那个 Classifier 的 Output 除以二,它讲话速度就变两倍快;如果你想要这个讲话放慢速度,就把Classifier 输出的长度乘两倍。
但是,虽然表面上看起来有种种的厉害之处,尤其是平行化是它最大的优势,但是 NAT 的 Decoder ,它的 Performance,往往都不如 AT 的 Decoder。
⇒ Multi-Modality
在这里插入图片描述

Encoder-Decoder之间的信息传递:CrossAttention

有两个输入来自Encoder(Encoder 提供两个箭头), Decoder 提供了一个箭头
在这里插入图片描述

  1. Encoder输入一排向量,输出一排向量 a 1 , a 2 , a 3 a^1,a^2,a^3 a1,a2,a3,经过transform产生 Key1 Key2 Key3( k 1 , k 2 , k 3 k^1,k^2,k^3 k1,k2,k3),以及 v 1 , v 2 , v 3 v^1,v^2,v^3 v1,v2,v3.

  2. Decoder 会先吃 BEGIN,得到一个向量,输入多少长度的向量,输出就是多少向量。乘上一个矩阵做一个 Transform,得到一个 Query 叫做 q q q

  3. 利用q,k计算attention的分数,并做Normalization,得到 α 1 ′ , α 2 ′ , α 3 ′ , \alpha_1',\alpha_2',\alpha_3', α1,α2,α3,
    在这里插入图片描述

  4. α 1 ′ , α 2 ′ , α 3 ′ , \alpha_1',\alpha_2',\alpha_3', α1,α2,α3, v 1 , v 2 , v 3 v^1,v^2,v^3 v1,v2,v3做weighted sum(加权求和),得到 v v v.

  5. v v v丢进Fully-Connected 的Network,做接下来的任务。
    在这里插入图片描述

总之,Decoder 就是产生一个 q q q,去 Encoder 抽取信息出来,当做接下来的 Decoder 的Fully-Connected 的 Network 的 Input
在这里插入图片描述
其中,Decoder可以看Encoder中的许多层而不一定只是最后一层。

training

以语音辨识为例
训练数据:一段音频与对应的文字,文字为one-hot编码的向量
训练过程:Decoder输出的是概率分布。可以通过输出的概率分布与Ground Truth之间的计算交叉熵(Cross Entropy)并求梯度实现优化,交叉熵的值越小越好。
在这里插入图片描述
在训练Decoder时,会输入“正确答案”而不是自己产生的答案
⇒Teacher Forcing

(但测试的时候,显然没有正确答案可以给 Decoder 看)
在这里插入图片描述

三、Tips

(for seq2seq model)

  • Copy Mechanism
    decoder没必要自行创造输出,它要做的事也许是从输入的东东里复制一些出来,而非创造词汇

    • chatbot
      在这里插入图片描述

    • 摘要
      在这里插入图片描述

  • Guided Attention
    有时seq2seq model训练会产生奇怪的结果,比如漏字(没看到)
    ⇒强迫机器一定要把输入的东西全看过(如TTS),强迫attention要用某种方式
    例如,对语音合成或者是语音辨识来说,我们想像中的 Attention,应该就是由左向右
    在这里插入图片描述

  • 束搜索 -beam search
    在这里插入图片描述

四、评测标准Optimizing Evaluation Metrics

BLEU Score 是 Decoder产生一个完整的句子以后再去跟正确的答案一整句做比较。但是,在训练时,是对每一个生成的token进行优化,使用的指标是交叉熵。
换言之,训练的时候,是看 Cross Entropy,但是我们实际上你作业真正评估的时候,看的是 BLEU Score
不能把BLEU作为LOSS⇒无法微分。
解决办法:遇到你在 Optimization 无法解决的问题,用 RL 硬 Train 一发。遇到你无法 Optimize 的 Loss Function,把它当做是 RL 的 Reward,把你的 Decoder 当做是 Agent。
在这里插入图片描述

  • Scheduled Sampling
    由于Teacher Forcing的存在,训练跟测试的情景是不一致。Decoder 在训练的时候,永远只看过正确的东西,那在测试的时候,只要有一个错,那就会一步错 步步错。
    解决:给 Decoder 的输入加一些错误的东西⇒Scheduled Sampling。
    问题:会损害平行化的能力。
    在这里插入图片描述

相关文章:

transformer(李宏毅老师系列)

自学参考: Transformer:Attention Is All You Need Transformer论文逐段精读 视频课 课件资料 笔记 一、引入 seq2seq:输入一个序列的向量作为input,output的长度由机器自己决定seq2seq model应用: 语音辨识 输入是声音讯号的一串vector 输出…...

XCode15.4真机运行调试

更新Xcode后,没有模拟器内容,而且真机也不显示,编译按钮无法点击,设备在管理运行目标中可见,但无法选中解决方案:下载iOS17.5模拟器,但最坑的是直接点击“Get”下载总是中断,且无法断…...

Google Mock 和 Google Test编写单元测试入门(环境配置、简单执行)

文章目录 环境的配置方法1:从源代码构建第一步:克隆库的源代码第二步:构建库 方法 2:使用 CMake 的 FetchContent示例 CMakeLists.txt 项目的创建项目结构CMakeLists.txt (根目录)main.cpp (示例程序)tests/CMakeLists.txt (测试部…...

shell外壳与Linux权限

🌈个人主页:Yui_ 🌈Linux专栏:Linux 🌈C语言笔记专栏:C语言笔记 🌈数据结构专栏:数据结构 文章目录 1.shell命令以及运行原理2. Linux权限的概念3.Linux权限管理3.1 文件访问者的分类…...

越混越好的项目经理做对了哪些事?现在知道还不晚

作为一名项目经理,你最害怕的是什么? 是做不完的项目?延迟的进度条?还是团队人心涣散? 很多人都知道,得人心者得天下,一个成功的领导者,一定是能做到让人心服口服的。如果失去了团…...

haproxy是什么?以及haproxy基础实验

目录 一、什么是负载均衡? 二、为什么要用haproxy? 三、haproxy的基本部署实验: 3.1 基本配置实验 环境准备: 详细步骤: 3.2 haproxy-多进程与多线程实验: 多进程: 多线程:…...

【向量数据库】向量数据库的构建和检索

1、使用 sentence-transformers 将文本编码为向量 安装 sentence-transformers: pip install -U sentence-transformers在 huggingface 下载 all-MiniLM-L6-v2 模型权重(1_Pooling 是文件夹,里面包含一个 config.json 文件)&…...

Mysql基础篇之DQL语言

Mysql基础篇之DQL语言 1. 基础查询特点语法格式闲言碎语 2. 条件查询语法格式条件表达式逻辑表达式模糊查询 3. 排序查询4. 常见函数单行函数1. 字符函数2. 数学函数3. 日期函数4. 流程控制函数5. 其他函数 分组函数 5. 分组查询分组函数语法格式特点 6. 多表连接查询分类SQL 七…...

python async

要使用 Python 的 async 特性编写一个代码,以交替使用两个 AI API 处理数据,您可以按照以下步骤进行。假设这两个 AI API 的调用是异步的,并且我们需要在两个 API 之间轮流处理一组数据。 import asyncio import aiohttp async def call_ap…...

利用QT和FFmpeg实现一个简单的视频播放器

在当今的多媒体世界中,视频播放已成为不可或缺的一部分。从简单的媒体播放器到复杂的视频编辑软件,视频解码和显示技术无处不在。本示例使用Qt和FFmpeg构建一个简单的视频播放器。利用ffmpeg解码视频,通过QWidget渲染解码后的图像&#xff0c…...

怎么用云手机进行TikTok矩阵运营

TikTok作为炙手可热的社交媒体巨头,已经吸引了亿万用户的目光。随着科技的飞速发展,云手机的出现为TikTok矩阵运营注入了新的活力。本文将深入探讨云手机在TikTok矩阵运营中的实际应用,并分享一系列高效策略与技巧。 (1&#xff0…...

TCP/IP 协议及其协议号

协议号十六进制协议号协议介绍10x1ICMP (Internet Control Message Protocol)20x2IGMP (Internet Group Management Protocol) 30x3GGP (Gateway-to-Gateway Protocol) 40x4IPv4 (encapsulation) 50x5ST (Stream Protocol) 60x6TCP (Transm…...

【传知代码】机器情绪及抑郁症算法 四(论文复现)

在现代心理健康研究中,抑郁症一直是一个备受关注的课题。随着科学的进步,研究人员逐渐认识到,抑郁症的成因远不止单一因素,而是由复杂的生物学、心理学和社会环境因素交织而成的。最近,MSA(综合性综合性模型…...

C#开启和关闭UAC功能

在开发软件或制作安装包时,有时会需要管理员权限 ,但是又不想弹出UAC对话框。 可以编写一个小工具,检测UAC是否关闭。如果没有关闭,就自动关闭UAC。 实现比较简单, 找到注册表 计算机\HKEY_LOCAL_MACHINE\SOFTWARE…...

LVS的简单配置及对Mysql主从复制的补充

Day 22 LVS的配置 环境准备 DSN() 用来解析各主机的域名和ip地址,配置域名解析huajuan,负责管理其他主机 web1--->web1.tangpin.huajuan web2--->web2.tangpin.huajuan dns--->dns.tangpin.huajuan web1(192.168.2.200) 用nginx…...

七夕情人节特辑:程序员的浪漫惊喜,9个表白源码,甜蜜编程陪你过节

大家好呀👋,今天是中国的七夕情人节,一个充满浪漫与爱的日子。为了庆祝这个特别的节日,我为大家精心准备了9个表白专用的前端小项目。这些项目涵盖了“我爱你”网站、爱情表白网站和心形动画等,通过HTML、CSS和一点点J…...

Mask-Rcnn

一 、FPN层 FPN层的基本作用 基本网络架构 基本思想 将多个阶段特征图融合在一起,这就相当于既有了高层的语义特征,也有了低层的轮廓特征 二、RPN层 三、ROI Align层...

Python图像背景去除

目录 🎁库的导入 🎀库的安装 🎁rembg库去除背景 🎁效果 🎁文末彩蛋 今天来介绍一个特别有趣的python库,rembg库,全称是“Remove Background”的缩写,意为“去除背景”&#xff…...

【C语言篇】C语言常考及易错题整理DAY1

文章目录 C语言常考及易错题整理选择题全局、局部和静态变量#define与typedef转义字符操作符循环其他 编程题计算日期到天数转换柯尼希定理旋转数组的最小数字描述错误的集合整数转换密码检查 C语言常考及易错题整理 选择题 全局、局部和静态变量 执行下面程序,正…...

MySQL5.7之源码安装

文章目录 下载编译&打包初始化数据目录启动服务器更改/设置root密码 下载 下载地址:https://downloads.mysql.com/archives/community/ 推荐下载 All Operating Systems (Generic) (Architecture Independent), Compressed TAR ArchiveIncludes Boost Headers …...

【Linux学习 | 第3篇】Linux系统安装 jdk+Tomcat+MySQL+lrzsz

文章目录 Linux—day31. 软件安装方式2. 安装jdk3. 安装Tomcat3.1 安装步骤:3.2 防火墙操作3.3 停止Tomcat服务的方式 4. 安装MySQL5. 安装lrzsz5.1 操作步骤 Linux—day3 Linux系统中软件安装 1. 软件安装方式 二进制发布包安装:软件已经针对具体平台…...

python语言day5 MD5 json

md5: python提供了内置的md5加密功能,使用md5模拟一个小项目: 注册: 启动py程序,在控制台界面提示用户输入用户名及密码; 使用md5加密 密码; 创建txt文件记录输入的用户名 和密文。 登录&…...

【Python学习手册(第四版)】学习笔记19-函数的高级话题

个人总结难免疏漏,请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 本文主要介绍函数相关的高级概念:递归函数、函数注解、lambda表达式函数,常用函数工具如map、filter、reduce,以及通用的函数设…...

Selenium + Python 自动化测试11(unittest组织用例)

我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。 上一篇我们讨论了unittest基本使用方法。 本篇文章我们接着讲。一些概念和一些常用的构造测试集的方法。 1、基本概念 1)Test Case 一个Test Case的实例就是一个测…...

【唐氏题目 nt题】与众不同

# 与众不同 ## 题目描述 A是某公司的CEO,每个月都会有员工把公司的盈利数据送给A,A是个与众不同的怪人,A不注重盈利还是亏本,而是喜欢研究「完美序列」:一段连续的序列满足序列中的数互不相同。 A想知道区间[L,R]之…...

2000块的活嫌低?这个 6 位数的项目,你可不能错过哟!

2000块钱嫌低?这个6位数的项目,你可不能错过,关注有好礼。 最近写了一篇“接了一个2000块钱的活,大家看看值不值”的文章,发现流量和大家互动的热情出奇的高,可能是跟有钱有关的缘故,大家不是奔…...

【Postman工具】

一.接口扫盲 1.什么是接口? 接口是系统之间数据交互的通道。拿小红到沙县点餐为例:小红想吃鸭腿饭。她要用什么语言来表达?跟谁表达?通过什么表达?按照生活习惯应该是:小红根据菜单对服务员用中文表达她想要…...

全网超详细攻略-从入门到精通haproxy七层代理

目录 一.haproxy概述 1.1 haproxy简介 1.2 haproxy的主要特性 1.3 haproxy的优缺点 二.负载均衡介绍 2.1 什么是负载均衡 2.2 为什么用负载均衡 2.3 负载均衡类型 2.3.1 四层负载均衡 2.3.2 七层负载均衡 2.3.3 四层和七层的区别 三.haproxy的安装及服务 3.1 实验环…...

AI编程辅助工具:CodeGeeX 插件使用

CodeGeeX 插件使用 前言1.支持的平台2.安装步骤3.启用插件4.代码生成5.代码优化 前言 CodeGeeX 是一款基于 AI 技术的编程助手插件,旨在帮助开发者提高编程效率和代码质量。它能够智能生成代码、优化现有代码、自动生成文档以及回答编程相关的问题。无论您是初学者…...

sql注入实战——thinkPHP

sql注入实战——thinkPHP sql注入实战——thinkPHPthinkPHP前期环境搭建创建数据库开始寻找漏洞点输入SQL注入语句漏洞分析 实验错误 sql注入实战——thinkPHP thinkPHP前期环境搭建 下载thinkPHP文件 解压,将framework关键文件放到think-5.0.15中,改…...