Lesson 9 Transformer

听课(李宏毅老师的)笔记,方便梳理框架,以作复习之用。本节课主要讲了seq2seq model简介,以及应用,架构(包括encoder和decoder,encoder和decoder之间如何协作),怎样训练transformer,train 时的一些tips。

1. 什么是seq2seq

1.1 简介

sequence-to-sequence(seq2seq)
比如语音识别、机器翻译、语音翻译、语音合成等
在这里插入图片描述
输入文字,输出语音
在这里插入图片描述

1.2 其他应用

1.2.1 对话机器人

在这里插入图片描述

1.2.2 自然语言处理

大多数自然语言处理(NLP)的任务都是QA,将问题和文章输入进seq2seq model 就能得到answer
在这里插入图片描述
seq2seq model就像瑞士军刀,可以砍柴什么的,也可以切菜。seq2seq什么都可以做,但是没必要。定制化的模型可能更好
在这里插入图片描述

1.2.3 文法剖析

当时的论文把这个文法剖析当做翻译来做的
在这里插入图片描述

1.2.4 multi-label classification

与multi-class classification对比:
muli-class classification是选择某个class输出,只输出一个class
multi-label classification是由模型自己选择输出几个标签,比如输入一个电影的类型,可能会输出“悬疑/惊悚”,“喜剧/爱情”,“家庭”等
在这里插入图片描述

1.2.5 object detection

识别输出有几种动物
在这里插入图片描述

2. seq2seq架构(Transformer)

2.1 整体架构

在这里插入图片描述

2.2 encoder

2.2.1 encoder在seq2seq模型中的位置

在这里插入图片描述

2.2.2 encoder内部结构

讲一下大致的结构,分为输入,位置编码,N块灰框框里面的东西。
灰框框里面是:

  • multi-head attention(实际上就是self-attention)
  • add(下面详细讲)
  • norm(下面详细讲)
  • feed forward(下面详细讲)
    在这里插入图片描述
    一个block是好几层layer做的事情
    在这里插入图片描述
    之前说的那个add,就是下图中的residual connection,就是输入【b+b经过self-intention之后输出的a】形成【a+b】,这个过程叫做residual connection,也就是之前架构图里面的add

norm就是前面写的norm了,这里的norm是layer normalization,跟之前的batch normalization是不一样的。
在batch normalization里,是对不同feature的同一维度进行norm
在layer normalization里,是对同一feature的不同维度进行norm

在进行了add+norm操作之后,再丢入fc network,再进行add+norm
这样一个灰框框里的流程就走完了
在这里插入图片描述

2.2.3 小结

所以在encoder里,add&norm指的就是residual connection+layer normalization,而feed forward指的是fully connected network
在这里插入图片描述
原始论文的设计不一定是最好的,所以会有其他的encoder架构,也许performance比原论文的encoder架构更好。
在这里插入图片描述

2.3 decoder

2.3.1 decoder在seq2seq模型中的位置

在这里插入图片描述

2.3.2 decoder内部架构

在这里插入图片描述

2.3.3 Autoregressive(AT)

拿中文语音辨识举例:
decoder的输入:encoder的输出作为decoder的输入+BEGIN标识符
这里的BEGIN标识符其实是one-hot vector,就是一维为1,其他维为0
decoder的输出:经过softmax函数之后的vector的size大小为中文中所有字的个数,挑选出概率最大的那个字进行输出。
由于之前进行了softmax函数,所以这些中文字的概率加起来是1
在这里插入图片描述
输出第一个字后,再把第一个字当做输入,进而输出第二个字。
但是这样可能造成中途错了一个字之后,把错的字又当成输入输进去,这样就造成了“一步错步步错”。这个问题之后会提到怎么解决
在这里插入图片描述
与encoder的对比
在这里插入图片描述
那么这里的masked multi-head attention是什么呢?我们来看下它与self-attention的对比:
下图是self-attention的内部结构,可以看到b1是通过a1,a2,a3,a4生成的,但是在masked multi-head attention中,b1是通过a1生成的,b2是通过a1,a2生成的,b3是通过a1,a2,a3生成的……以此类推

在这里插入图片描述
self-attention具体计算过程如下:
在这里插入图片描述
而masked multi-head attention具体计算过程:
在这里插入图片描述
到目前为止有两个问题:

  • 后面的回答依赖前面的输出,而前面的输出可能出现错误
  • 不知道什么时候停
    在这里插入图片描述
    在这里插入图片描述
    针对第二个问题(不知道什么时候停),可以采取以下方法来解决:
    就像添加BEGIN token一样,我们添加一个STOP token,这个stop token实际上跟Begin token一样,但是一个是在输入,一个是在输出,所以不会搞混,不会存在重复的现象。
    在这里插入图片描述
    在这里插入图片描述

2.3.4 Non Autoregressive(NAT)

在这里插入图片描述
AT与NAT的对比
最大的一个区别就是AT是串行的,而NAT是并行的,速度更快。
那为什么NAT能做到并行呢?对比起AT来说,NAT的输入不再依赖于前一个输出,而是直接一股脑地将START输入,一次性得到所有输出。
那么就有一个问题:怎么知道输入几个START?
我们有两种方法:

  • 另外训练一个classifer,训练为输出是几个START;
  • 或者直接输入一个非常长的START序列,END会出现在输出的某个位置,我们直接忽略END后面的输出,只要END前面的。

在这里插入图片描述
任何东西都不是十全十美的,NAT虽然速度比AT更快,但是实际上performance比AT要差,这是因为multi-modality(多模态)。李老师没展开讲。但是我大概问了下chatgpt,下面是它的回答:
在Autoregressive(AT)与Non-Autoregressive(NAT)模型的对比中,多模态性可能会对模型的性能产生影响。由于NAT模型通常不像AT模型那样逐个生成输出序列的每个元素,它们更容易受到多模态数据的影响。多模态性可能增加了模型的复杂性,使得NAT模型更难以准确地预测输出序列。因此,一些研究表明,NAT模型在处理多模态数据时表现可能会比AT模型差。

2.4 encoder-decoder(二者的协作)

在这里插入图片描述

2.4.1 transformer整体架构

主要有几个概念需要解释:

  • encoder提供蓝色的两个输入
  • decoder提供绿色的一个输入
    这些输入我们在后面会解释分别是什么
  • cross attention

在这里插入图片描述
如下图所示:

  • kv来自encoder,也就是上图中蓝色的两个圈圈
  • q来自decoder,也就是上图中绿色的圈圈
    qk相乘之后做softmax得α’,再乘上v,所有的v相加即可
    这个过程叫cross attention
    ps:上图中其实是multi-head attention模块+add&norm=cross attention,但是下图没有表现multi-head,也没有画出add&norm,我觉得可能是为了简介省略掉了。
    在这里插入图片描述
    下一个词同理
    在这里插入图片描述
    当然不是说一定得按encoder的最后一层输出为decoder的输入,encoder里面有那么多层,那也许其中的某些层的输出也能当做decoder的输入
    在这里插入图片描述

3. Transformer的训练

3.1 输出

正确答案是一个one-hot vector,要让decoder输出的distribution跟ground truth越接近越好。也就是说minimize cross entropy
在这里插入图片描述

3.2 输入

在decoder训练的时候,是一个一个单词输出的,训练不是把上一个输出当成下一个输入,而是直接给decoder看正确答案当做输入。当然,最后的END符号decoder也得学习。
这种给decoder看正确答案的方法叫做teacher forcing
在这里插入图片描述

4. Tips

4.1 copy mechanism

有一些场景,模型没必要自己产生输出,它们也需要学会从输入中复制的能力。
比如机器对话,提取文献摘要(有些词汇是从文献中直接复制过来的)
在这里插入图片描述
在这里插入图片描述

4.2 guided attention

前面四种长句子机器能读对,但是最后的短词机器却没有念发这个字,可能训练的时候短句很少
ps:其实不知道为什么这个例子放在guided attention这里,跟guided attention有关系吗?没太懂这个逻辑呢?
在这里插入图片描述
在一些任务中,机器训练的顺序是非常重要的,比如语音辨识或者合成。所以产生了guided attention这种方法,固定了训练的顺序。
下图中,红线上面是正确的语序,也就是正确的训练顺序;而红线下面就是错误的训练顺序。
在这里插入图片描述

4.3 beam search

假设就只有两种输出,输出A的概率为0.6,输出B的概率为0.4,我们面临路径的两种选择:

  • greedy decoding:每一步都选择概率最大的
  • 全局最优:可能当前不是最好的,但是全局来看是最优的
  • beam search:暴力搜索是不可能的,但是我们发明了一种方法叫beam search,它有时有用,有时没用
    在这里插入图片描述
    比如我们在做sentence completion的任务,用beam search就可能导致重复的话语,表明分数最高的不一定就是最好的,还是要看任务的特性。
    在答案比较确定时,比如语音辨识,分数越高越好;
    但是在做需要创造力的任务时,比如语句补全,有时加入一些noise可能更好。

实际上,在train时为了让model看过更多的可能性加入noise比较普遍,但是在TTS(语音合成)中,测试时加入一些杂讯反而能得到比较好的结果。
在这里插入图片描述

4.4 optimizating evaluation metrics

在decoder训练时,指标是让cross entropy越小,而在验证时需要BLEU scores最高。
然而,cross entropy越小并不代表BLEU scores越高。
所以,挑选最好的model不是挑cross entropy最小的,而是挑bleu scores 最高的。也就是说在validation时,应以bleu scores为指标。
那么可不可以在训练时就让BLEU scores最大呢?
可以,但是很复杂。因为BLEU scores是不能微分的,做不了gradient decent。
在这里插入图片描述

4.5 scheduled sampling

之前提到,如果前面的输出错了,可能导致“一步错步步错”,解决方法就是训练时就让它错,减轻exposure bias(曝光偏差)的问题。这就是scheduled sampling
在这里插入图片描述
在这里插入图片描述

5. transformer回顾

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式——组合模式08

组合模式:把类似对象或方法组合成结构为树状的设计思路。 例如部门之间的关系。 设计模式,一定要敲代码理解 抽象组件 /*** author ggbond* date 2024年04月06日 08:54* 部门有:二级部门(下面管三级部门) 三级部门 &a…

【Spring】AOP——使用@around实现面向切面的方法增强

工作业务中,有大量分布式加锁的重复代码,存在两个问题,一是代码重复率高,二是容易产生霰弹式修改,使用注解和AOP可以实现代码复用,简化分布式锁加锁和解锁流程。 around注解是AspectJ框架提供的&#xff0c…

uniapp方法二 激活微信小程序自带的分享功能

1、配置 onLoad(){wx.showShareMenu({withShareTicket:true,//设置下方的Menus菜单,才能够让发送给朋友与分享到朋友圈两个按钮可以点击menus:["shareAppMessage","shareTimeline"]}) },2、事件 onShareAppMessage(res) {if (res.from butto…

1、认识MySQL存储引擎吗?

目录 1、MySQL存储引擎有哪些? 2、默认的存储引擎是哪个? 3、InnoDB和MyISAM有什么区别吗? 3.1、关于事务 3.2、关于行级锁 3.3、关于外键支持 3.4、关于是否支持MVCC 3.5、关于数据安全恢复 3.6、关于索引 3.7、关于性能 4、如何…

运放知识点总结

目录 一、运放基础知识 (operational amplifier) 1.由来 2.用途 3.符号 4.内部结构​编辑 5.虚短虚断 二、同相放大电路 (Non-inverting Amplifier) 三、反相放大电路 (Inverting Amplifier) 四、差分放大电路 (Difference Amplifier) 五、加法…

移动端-2(媒体查询+Less基础+rem适配方案+响应式布局+Bookstrap前端开发构架)

目录 1.rem布局 2.媒体查询 什么是媒体查询 语法规范 mediatype查询类型 关键字 媒体特性 3.Less基础 维护css的弊端 less介绍 less变量 less嵌套 less运算 4.rem适配方案 rem实际开发适配方案1 设计稿常见尺寸宽度 动态设置html标签font-size大小 元素大小取…

网络协议——STP(生成树协议)

1. 什么是环路? 信息经过一系列的转化或传递,然后再返回到起始点,形成一个闭合的循环。 2. 环路的危害 广播风暴(广播报文充斥着整个网络) MAC地址漂移,从而导致MAC地址表震荡。 使用 display mac…

Rust 基础语法和数据类型

数据类型 Rust提供了一系列的基本数据类型,包括整型(如i32、u32)、浮点型(如f32、f64)、布尔类型(bool)和字符类型(char)。此外,Rust还提供了原生数组、元组…

医学图像处理 利用pytorch实现的可用于反传的Radon变换和逆变换

医学图像处理 利用pytorch实现的可用于反传的Radon变换和逆变换 前言代码实现思路实验结果 前言 Computed Tomography(CT,计算机断层成像)技术作为如今医学中重要的辅助诊断手段,也是医学图像研究的重要主题。如今,随…

Mac安装配置Appium

一、安装 nodejs 与 npm 安装方式与 windows 类似 ,官网下载对应的 mac 版本的安装包,双击即可安装,无须配置环境变量。官方下载地址:https://nodejs.org/en/download/ 二、安装 appium Appium 分为两个版本,一个是…

yolov9训练自己的数据—vehicle 4类

yolov9训练自己的数据 1 conda环境安装指定版本torch 2 预训练模型测试3 训练自己的数据集3.1 制作数据3.2 创建模型配置文件3.3 创建数据加载配置文件3.4 使用ClearML跟踪训练日志3.5 训练3.6 模型测试3.7 转换成TensorRT模型 4 参考文档 1 conda环境 下载yolov9代码&#xf…

C语言:顺序表专题

目录 一、数据结构之顺序表/链表1.数据结构相关概念1.1什么是数据结构1.2为什么需要数据结构 二、顺序表1.顺序表的概念及结构2.顺序表分类3.动态顺序表的实现 一、数据结构之顺序表/链表 1.数据结构相关概念 1.1什么是数据结构 数据结构是由“数据”和“结构”两词组合而来…

解锁ETLCloud中Kettle的用法

随着大数据时代的到来,数据的处理和管理成为各行各业不可或缺的一环。ETL(Extract-Transform-Load)工具作为数据处理的重要环节,扮演着将数据从源端抽取出来、经过转换处理,最终加载至目标端的关键角色。在众多ETL工具…

【Python】数据挖掘与机器学习(一)

【Python】数据挖掘与机器学习(一) 大家好 我是寸铁👊 总结了一篇【Python】数据挖掘与机器学习(一)sparkles: 喜欢的小伙伴可以点点关注 💝 【实验1】预测鲍鱼年龄 问题描述 请从一份数据中预测鲍鱼的年龄,数据集在abalone.cvs中&#xff…

【Qt】:常用控件(二:QWidget核心属性)

常用控件(二) 一.cursor(光标形状)二.font(字体信息)三.toolTip(提示显示)四.focusPolicy(焦点)五.styleSheet(文本样式) 一.cursor&a…

Java BigDecimal类

原因 为什么要有BigDecimal类因为二进制的缘故&#xff0c;直接对浮点数进行运算&#xff0c;会导致精度丢失的问题下例&#xff1a;出现了0.1 0.2 <> 0.3 常见的API 这些API中&#xff0c;并不推荐由double类型转换的BigDecimal,因为底层还是double推荐使用由string 类…

QT5-qmediaplayer播放视频及进度条控制实例

qmediaplayer是QT5的播放视频的一个模块。它在很多时候还是要基于第三方的解码器。这里以Ubuntu系统为例&#xff0c;记录其用法及进度条qslider的控制。 首先&#xff0c;制作一个简单的界面文件mainwindow.ui&#xff1a; 然后&#xff0c;下载一个mp4或其他格式视频&#x…

【算法集训】基础算法:二分查找 | 概念篇

二分枚举&#xff0c;也叫二分查找&#xff0c;指的就是给定一个区间&#xff0c;每次选择区间的中点&#xff0c;并且判断区间中点是否满足某个条件&#xff0c;从而选择左区间继续求解还是右区间继续求解&#xff0c;直到区间长度不能再切分为止。 由于每次都是把区间折半&am…

小程序实现订阅功能和测试发送订阅信息

现在一次性订阅是只能用户点一次才能发送一次&#xff0c;而针对长期模板只有规定的几种类目政务、民生、交通等等的才可以&#xff0c;所以说感觉这功能其实已经不是很适合使用了&#xff0c;只适合一些特别的场景才可以使用。 地址&#xff1a;https://developers.weixin.qq…

where 函数

Pandas 中的 where 函数 在 Pandas 中&#xff0c;where 函数用于替换不满足条件的值。具体来说&#xff0c;它返回一个与原始 DataFrame 或 Series 形状相同的新对象&#xff0c;但所有不满足条件的值都被替换为指定的值&#xff08;默认为 NaN&#xff09;。 对于 DataFram…