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-》…

kubeadm搭建1.20.7版本k8s

资源 服务器名称ip地址服务master1&#xff08;2C/4G&#xff0c;cpu核心数要求大于2&#xff09;192.168.100.10docker、kubeadm、kubelet、kubectl、flannelnode01&#xff08;2C/2G&#xff09;192.168.100.30docker、kubeadm、kubelet、kubectl、flannelnode02&#xff08…

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; 反弹&…

ReactNative0.73发布,架构升级与更好的调试体验

这次更新包含了多种提升开发体验的改进&#xff0c;包括&#xff1a; 更流畅的调试体验: 通过 Hermes 引擎调试支持、控制台日志历史记录和实验性调试器&#xff0c;让调试过程更加高效顺畅。稳定的符号链接支持: 简化您的开发工作流程&#xff0c;轻松将文件或目录链接到其他…

react表单-受控

react - 表单组件 受控组件 表单项中的值&#xff08;value/checked&#xff09;受到类组件state中数据来控制&#xff0c;同时还需要绑定一个onChange事件来完成对state中数据的修改 import React, { Component } from react;class AppInput extends Component {// 设置受控组…

基于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指针 指向被调用的成员函…

openssl 常用命令 pkcs12

openssl pkcs12 openssl pkcs12 官方文档 1. 描述 The pkcs12 command allows PKCS#12 files (sometimes referred to as PFX files) to be created and parsed. PKCS#12 files are used by several programs including Netscape, MSIE and MS Outlook. pkcs12 命令是用来创…

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 . # 添加新文件和修改过的…

深入理解HTTP状态码及其在Web开发中的应用

在Web开发中&#xff0c;我们经常需要与服务器进行交互&#xff0c;以获取或发送数据。为了实现这一目标&#xff0c;我们使用HTTP协议。HTTP协议是一种无状态的、应用层的协议&#xff0c;它定义了客户端和服务器之间的通信方式。在HTTP协议中&#xff0c;有五种常用的HTTP状态…

Python高级算法——动态规划

Python中的动态规划&#xff1a;高级算法解析 动态规划是一种解决多阶段决策问题的数学方法&#xff0c;常用于优化问题。它通过将问题分解为子问题&#xff0c;并在解决这些子问题的基础上构建全局最优解。在本文中&#xff0c;我们将深入讲解Python中的动态规划&#xff0c;…

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; 过一段时间会变成死信队列…

elasticsearch|大数据|elasticsearch的api部分实战操作以及用户和密码的管理

一&#xff0c; 前言 本文主要内容是通过elasticsearch的api来进行一些集群的管理和信息查询工作&#xff0c;以及elasticsearch用户的增删改查和密码的重设以及重置如何操作 接上文&#xff1a;elasticsearch|大数据|elasticsearch低版本集群的部署安装和安全增强---密码设…