transformer模型结构|李宏毅机器学习21年

来源:https://www.bilibili.com/video/BV1Bb4y1L7FT?p=4&vd_source=f66cebc7ed6819c67fca9b4fa3785d39

文章目录

  • 概述
  • seq2seq
  • transformer
    • Encoder
    • Decoder
      • Autoregressive(AT)
        • self-attention与masked-self attention
        • model如何决定输出的长度
        • Cross-attention——连接encoder和decoder的桥梁
        • Training
        • 评估指标的优化
      • Non-autoregressive(NAT)

概述

transformer就是一个seq2seq的model。
Input一个sequence,output的长度由机器自己决定。

seq2seq

在这里插入图片描述

transformer

在这里插入图片描述

Encoder

输入一排向量,输出同样长度的另一排向量。
每一个Block做的事情是好几个layer做的事情。
每个block做的事(简化版):
在这里插入图片描述
完整版:
在这里插入图片描述
位置的资讯
Bert里会用到同样的架构:
在这里插入图片描述

Decoder

Autoregressive(AT)

在这里插入图片描述
在这里插入图片描述
decoder看到的输入是前一个阶段自己的输出。
那么这样会不会导致error propagation(一步错步步错)?
不会。
exposure bias:test时decoder可能会看到错误的输入,而train时decoder看到的是完全正确的,即它在训练时完全没有看过错误的东西。
解决方法:scheduled sampling:训练时给decoder的输入加一些错误的东西。

decoder与encoder的差别

self-attention与masked-self attention

self-attention
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
为什么要masked?
因为在encoder里面,input是同时输进去的;而decoder里面,input是一个一个输进去的。

model如何决定输出的长度

加上一个Stop Token
除了所有的中文字、< begin >之外,还需要准备一个< end >,不过通常< begin >和< end >会用同一个符号,因为他们分别只会在开头和结尾出现。

Cross-attention——连接encoder和decoder的桥梁

在这里插入图片描述
在这里插入图片描述
k、v、q如何得出:self-attention|李宏毅机器学习21年

各式各样的连接方式都可以:
在这里插入图片描述

Training

前面的部分都是,假设model训练好以后,它是怎么做inference的。
训练资料:输入-输出对
在这里插入图片描述
Teacher Forcing:在decoder训练的时候输入的是正确答案
在这里插入图片描述

交叉熵(Cross Entropy)是衡量两个概率分布之间差异的一种度量方式,在机器学习中常用作分类问题的损失函数。假设我们有两个概率分布的向量,一个是真实的概率分布 P P P,一个是预测的概率分布 Q Q Q,那么交叉熵可以表示为:
H ( P , Q ) = − ∑ i P ( i ) log ⁡ Q ( i ) H(P, Q) = -\sum_{i} P(i) \log Q(i) H(P,Q)=iP(i)logQ(i)

举例:

  • 真实概率分布 P = [ 0.6 , 0.4 ] P = [0.6, 0.4] P=[0.6,0.4]
  • 预测概率分布 Q = [ 0.8 , 0.2 ] Q = [0.8, 0.2] Q=[0.8,0.2]
    计算这两个向量的交叉熵如下:
    H ( P , Q ) = − ( 0.6 × log ⁡ ( 0.8 ) + 0.4 × log ⁡ ( 0.2 ) ) = 0.7777 H(P, Q) = - (0.6 \times \log(0.8) + 0.4 \times \log(0.2)) = 0.7777 H(P,Q)=(0.6×log(0.8)+0.4×log(0.2))=0.7777
    所以这两个向量的交叉熵大约是 0.7777 0.7777 0.7777
    注意,由于交叉熵是衡量两个分布之间的差异,因此 P P P Q Q Q必须是有效的概率分布,即 P P P Q Q Q中的所有元素都必须是非负的,并且它们的和为 1。在实际应用中,为了防止对数函数中出现对零取对数的情况,通常会给 Q Q Q 中的元素加上一个很小的正数,比如 1 e − 9 1e-9 1e9
评估指标的优化

训练时是min cross entropy(字与字之间),测试时是max BLEU score(句子与句子之间),这两个指标可以等价吗?
不见得。
训练的时候都是一个字一个字出来的,怎么在训练的时候就用BLEU score:
遇到无法optimize的loss fuction,用RL硬train一发就可以。
把fuction当做是RL的reward,把decoder当做agent。(比较难)
在这里插入图片描述

BLEU(Bilingual Evaluation Understudy)分数是一种常用于评估机器翻译质量的指标,它通过比较机器翻译的文本和一个或多个参考翻译来计算分数。BLEU分数考虑了准确性(通过n-gram匹配)和流畅性(通过句子长度的惩罚)。

BLEU分数的计算包括以下几个步骤:

  1. n-gram精确度:对于每个n-gram(n可以是1, 2, 3, …),计算机器翻译中n-gram出现的次数,并与参考翻译中的n-gram出现次数进行比较。对于每个n-gram,计算其精确度(precision)。

  2. 修剪(Clipping):如果机器翻译中的n-gram出现次数超过参考翻译中的最大出现次数,将其修剪至该最大值。

  3. 加权平均:对于不同的n-gram精确度,计算它们的几何平均值,并对结果取自然对数。

  4. 句子长度惩罚(Brevity Penalty, BP):如果机器翻译的长度小于参考翻译的长度,将施加一个惩罚以避免过短的翻译。

计算公式:

BLEU = BP ⋅ exp ⁡ ( ∑ n = 1 N w n log ⁡ p n ) \text{BLEU} = \text{BP} \cdot \exp\left(\sum_{n=1}^{N} w_n \log p_n\right) BLEU=BPexp(n=1Nwnlogpn)

其中:

  • p n p_n pn 是第n个n-gram的精确度。
  • w n w_n wn 是第n个n-gram的权重,通常取为 1 / N 1/N 1/N,使得所有n-gram权重之和为1。
  • BP \text{BP} BP 是句子长度惩罚,计算方式为:

BP = { 1 如果机器翻译的长度 > 参考翻译的长度 exp ⁡ ( 1 − 参考翻译的长度 机器翻译的长度 ) 其他情况 \text{BP} = \begin{cases} 1 & \text{如果机器翻译的长度} > \text{参考翻译的长度} \\ \exp\left(1 - \frac{\text{参考翻译的长度}}{\text{机器翻译的长度}}\right) & \text{其他情况} \end{cases} BP={1exp(1机器翻译的长度参考翻译的长度)如果机器翻译的长度>参考翻译的长度其他情况

举例:

本例中机器翻译(MT)与参考翻译(Ref)不完全匹配,并且将计算最多包括2-gram的BLEU分数。

假设机器翻译(MT)为:“the black cat sat on the mat”,参考翻译(Ref)为:“the cat sat on the mat”。我们计算1-gram和2-gram的BLEU分数(即N=2)。

  1. 对于1-gram:

    • MT中的词:“the”, “black”, “cat”, “sat”, “on”, “the”, “mat”
    • Ref中的词:“the”, “cat”, “sat”, “on”, “the”, “mat”
    • MT中每个词的出现次数与Ref中相同或更多的词有:“the” (2次), “cat” (1次), “sat” (1次), “on” (1次), “mat” (1次)
    • 因此,1-gram精确度 p 1 = 6 7 p_1 = \frac{6}{7} p1=76(因为MT中有7个词,其中6个词匹配到了Ref)
  2. 对于2-gram:

    • MT中的2-gram:“the black”, “black cat”, “cat sat”, “sat on”, “on the”, “the mat”
    • Ref中的2-gram:“the cat”, “cat sat”, “sat on”, “on the mat”
    • MT中每个2-gram的出现次数与Ref中相同或更多的2-gram有:“cat sat” (1次), “sat on” (1次), “on the” (1次)
    • 因此,2-gram精确度 p 2 = 3 6 p_2 = \frac{3}{6} p2=63(因为MT中有6个2-gram,其中3个匹配到了Ref)
  3. 长度惩罚(BP):

    • MT的长度为7,Ref的长度为6。
    • 因为MT的长度大于Ref的长度,所以没有长度惩罚, BP = 1 \text{BP} = 1 BP=1
  4. 加权平均:

    • 假设我们给1-gram和2-gram相同的权重,即 w 1 = w 2 = 0.5 w_1 = w_2 = 0.5 w1=w2=0.5
    • 加权平均为 exp ⁡ ( 0.5 ⋅ log ⁡ p 1 + 0.5 ⋅ log ⁡ p 2 ) \exp(0.5 \cdot \log p_1 + 0.5 \cdot \log p_2) exp(0.5logp1+0.5logp2)

现在我们可以计算BLEU分数:

BLEU = BP ⋅ exp ⁡ ( 0.5 ⋅ log ⁡ 6 7 + 0.5 ⋅ log ⁡ 3 6 ) \text{BLEU} = \text{BP} \cdot \exp\left(0.5 \cdot \log \frac{6}{7} + 0.5 \cdot \log \frac{3}{6}\right) BLEU=BPexp(0.5log76+0.5log63)

计算具体数值:

BLEU = 1 ⋅ exp ⁡ ( 0.5 ⋅ log ⁡ 6 7 + 0.5 ⋅ log ⁡ 1 2 ) \text{BLEU} = 1 \cdot \exp\left(0.5 \cdot \log \frac{6}{7} + 0.5 \cdot \log \frac{1}{2}\right) BLEU=1exp(0.5log76+0.5log21)
BLEU ≈ exp ⁡ ( − 0.42365 ) ≈ 0.65468 \text{BLEU} \approx \exp\left(-0.42365\right) \approx 0.65468 BLEUexp(0.42365)0.65468
因此,BLEU分数大约为0.65468。这个分数反映了机器翻译与参考翻译在1-gram和2-gram层面上的部分匹配程度。在实际应用中,BLEU分数通常会乘以100,因此这个分数可能会表示为65.468。

Non-autoregressive(NAT)

常用于语音合成领域,因为可以:输出长度 * 2 -> 语速 * 2
在这里插入图片描述

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

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

相关文章

【亲测有效】支持横竖屏 微信小程序video禁止进度条拖动,微信小程序遮罩进度条,

背景&#xff1a;部分课程禁止客户拖动视频进度条直至播放结束 红色是遮罩区域遮罩区域 实际遮罩效果&#xff08;有一个很浅的阴影区域&#xff09; 实现代码 .wxml文件 <video enable-progress-gesture"false" ><cover-view class"cover">…

基于深度学习的yolov7植物病虫害识别及防治系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介简介YOLOv7 系统特性工作流程 二、功能三、系统四. 总结 一项目简介 # YOLOv7植物病虫害识别及防治系统介绍 简介 该系统基于深度学习技术&#xff0c;采…

Seata配置

参考教程 seata 分布式事务的环境搭建与使用 Seata 1.4.0 nacos配置和使用&#xff0c;超详细 Seata 1.4.2 的安装 Nacos的配置和使用 官网下载地址 本文以v1.4.1为例 1.数据库及表的创建 创建seata数据库&#xff0c;创建以下表&#xff08;右键连接-》新建数据库seata-》…

windows系统proteus中Ardunio Mega 2560和虚拟机上Ubuntu系统CuteCom进行串口通信

在文章利用proteus实现串口助手和arduino Mega 2560的串口通信-CSDN博客 中&#xff0c;实现了windows系统的proteus中Ardunio Mega 2560和SSCOM通过虚拟串口进行通信。虚拟串口的连接示意图如下图所示。 在文章windows系统和虚拟机上ubuntu系统通过虚拟串口进行通信-CSDN博客…

3DMAX关于显示驱动问题的解决方法大全

3DMAX与显卡驱动有关的问题主要有以下几种情况&#xff1a; 1.3DMAX启动弹出这样的界面&#xff1a; 2.主工具栏按钮不显示&#xff0c;或者鼠标移上去才显示&#xff08;刷新问题&#xff09;。 3&#xff0e;视口菜单不显示或显示不全。 问题分析&#xff1a; 首先&#x…

安全基础从0开始

文章目录 常见名词小实战 网站搭建小实战抓包模拟器状态码返回值网站搭建WEB应用安全漏洞 数据包&封包&信息收集**参考点** 常见名词 前后端&#xff0c;POC/EXP&#xff0c;Payload/Shellcode&#xff0c;后门/Webshell&#xff0c;木马/病毒&#xff0c; 反弹&…

基于ssm应急资源管理系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本应急资源管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

排序算法之七:归并排序(递归)

基本思想 基本思想&#xff1a; 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1…

C++:this指针

目录 前言 成员函数返回this指向的对象本身时&#xff0c;为什是返回引用类型&#xff1f; 成员函数返回this对象本身时&#xff0c;内部通常会通过拷贝构造函数来创建一个临时对象&#xff1f; 总结 前言 c通过提供特殊的对象指针&#xff0c;this指针 指向被调用的成员函…

Nodejs 第二十二章(脚手架)

编写自己的脚手架 那什么是脚手架&#xff1f; 例如:vue-cli Angular CLI Create React App 编写自己的脚手架是指创建一个定制化的工具&#xff0c;用于快速生成项目的基础结构和代码文件&#xff0c;以及提供一些常用的命令和功能。通过编写自己的脚手架&#xff0c;你可以…

Linux和Windows环境下如何使用gitee?

1. Linux 1.1 创建远程仓库 1.2 安装git sudo yum install -y git 1.3 克隆远程仓库到本地 git clone 地址 1.4 将文件添加到git的暂存区&#xff08;git三板斧之add&#xff09; git add 文件名 # 将指定文件添加到git的暂存区 git add . # 添加新文件和修改过的…

vs2017+qt5.14.2遇到的问题

1、在安装qt插件后&#xff0c;导入pro文件时&#xff0c;报 msvc-version.conf loaded but QMAKE_MSC_VER isn’t set 修改E:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\common\msvc-version.conf文件中添加

RabbitMQ学习笔记10 综合实战 实现新商家规定时间内上架商品检查

配置文件&#xff1a; 记住添加这个。 加上这段代码&#xff0c;可以自动创建队列和交换机以及绑定关系。 我们看到了我们创建的死信交换机和普通队列。 我们可以看到我们队列下面绑定的交换机。 我们创建一个controller包进行测试: 启动&#xff1a; 过一段时间会变成死信队列…

SSM与SpringBoot面试题总结

什么是spring&#xff1f;谈谈你对IOC和AOP的理解。 Spring:是一个企业级java应用框架&#xff0c;他的作用主要是简化软件的开发以及配置过程&#xff0c;简化项目部署环境。 Spring的优点: 1、Spring低侵入设计&#xff0c;对业务代码的污染非常低。 2、Spring的DI机制将…

FPGA设计时序约束十一、others类约束之Set_Maximum_Time_Borrow

目录 一、序言 二、Set Maximum Time Borrow 2.1 基本概念 2.2 设置界面 2.3 命令语法 2.4 命令示例 三、参考资料 一、序言 在Vivado的时序约束窗口中&#xff0c;存在一类特殊的约束&#xff0c;划分在others目录下&#xff0c;可用于设置忽略或修改默认的时序路径分析…

IntelliJ IDEA开启git版本控制的简单教程

这篇文章想要分享一下怎么在IntelliJ IDEA开启版本控制&#xff0c;博主使用的是gitee&#xff0c;首先需要安装git&#xff0c;关于git的安装这里就不介绍了&#xff0c;很简单。 目录 创建git仓库 创建项目 开启版本控制 拉取项目 创建git仓库 首先&#xff0c;需要登录…

MATLAB | 官方举办的动图绘制大赛 | 第四周(收官周)赛情回顾

MATHWORKS官方举办的迷你黑客大赛第三期(MATLAB Flipbook Mini Hack)圆满结束&#xff0c;虽然我的水平和很多大佬还有比较大的差距&#xff0c;但所有奖也算是拿满了&#xff1a; 专家评选前三名&#xff0c;以及投票榜前十&#xff1a;~ 每周的阶段性获奖者&#xff1a; 下面…

【Python】手把手教你用tkinter设计图书管理登录UI界面(三)

上一篇&#xff1a;【Python】手把手教你用tkinter设计图书管理登录UI界面&#xff08;二&#xff09;-CSDN博客 下一篇&#xff1a; 紧接上一篇文章&#xff0c;继续完善项目功能&#xff1a;用户登录。由于老王的注册部分有亿点点复杂&#xff0c;还没完成&#xff0c;但是…

鸿蒙OS应用开发的开发环境

鸿蒙OS应用开发的开发环境 鸿蒙系统发展越来越快&#xff0c;已经开始走进千家万户&#xff0c;从手机到电视机&#xff0c;再到汽车&#xff0c;以后各种手表、智能设备等等。这已经是一个广泛应用的操作系统&#xff0c;也是跟大家生活密切相关的操作系统。要想在这个平台上…

Kubernetes里的DNS;API资源对象ingress;Kubernetes调度;节点选择器NodeSelector;节点亲和性NodeAffinity

Kubernetes里的DNS K8s集群内有一个DNS服务&#xff1a; kubectl get svc -n kube-system |grep dns测试&#xff1a; 在tang3上安装bind-utils,目的是安装dig命令 yum install -y bind-utils apt install dnsutils #ubuntu上 解析外网域名 dig 10.15.0.10 www.baidu.com…