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.hqwc.cn/news/265040.html

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

相关文章

并查集带压缩路径的find

目录 原因&#xff1a; 优化&#xff1a; 原因&#xff1a; 当路径比较特殊&#xff0c;如图&#xff1a; 非常深&#xff0c;最底层进行find时&#xff0c;循环找根&#xff08;或者递归找&#xff09;&#xff0c;消耗就比较大。 我们可以进行优化。 优化&#xff1a; &…

Java设计模式分类

java的设计模式大体上分为三大类&#xff1a; 创建型模式&#xff08;5种&#xff09;&#xff1a;工厂方法模式&#xff0c;抽象工厂模式&#xff0c;单例模式&#xff0c;建造者模式&#xff0c;原型模式。 结构型模式&#xff08;7种&#xff09;&#xff1a;适配器模式&am…

【算法系列篇】递归、搜索和回溯(二)

文章目录 前言1. 两两交换链表中的节点1.1 题目要求1.2 做题思路1.3 代码实现 2. Pow(X,N)2.1 题目要求2.2 做题思路2.3 代码实现 3. 计算布尔二叉树的值3.1 题目要求3.2 做题思路3.3 代码实现 4. 求根节点到叶结点数字之和4.1 题目要求4.2 做题思路4.3 代码实现 前言 前面为大…

行人重识别paper汇总

文章目录 2021Learning Generalisable Omni-Scale Representations for Person Re-Identification 参考 2021 Learning Generalisable Omni-Scale Representations for Person Re-Identification code: https://github.com/KaiyangZhou/deep-person-reid 摘要&#xff1a;一…

浅析以太网接口及串口转以太网技术

浅析以太网接口 以太网相关接口主要包括&#xff1a;MII/RMII/SMII以及GMII/RGMII/SGMII接口。 一、MII接口 MII&#xff08;Media Independent Interface&#xff09;介质无关接口或称为媒体独立接口&#xff0c;它是IEEE-802.3定义的以太网行业标准。它包括一个数据接口和…

【C++】C++异常语法、使用、规范、异常安全及异常的优缺点

1. C异常概念 异常是一种处理错误的方式&#xff0c;当一个函数发现自己无法处理的错误时就可以抛出异常&#xff0c;让函数的直接或间接的调用者处理这个错误。 throw: 当问题出现时&#xff0c;程序会抛出一个异常。这是通过使用 throw 关键字来完成的。catch: 在您想要处理…

HarmonyOS4.0从零开始的开发教程11给您的应用添加弹窗

HarmonyOS&#xff08;十&#xff09;给您的应用添加弹窗 概述 在我们日常使用应用的时候&#xff0c;可能会进行一些敏感的操作&#xff0c;比如删除联系人&#xff0c;这时候我们给应用添加弹窗来提示用户是否需要执行该操作&#xff0c;如下图所示&#xff1a; 弹窗是一种…

谈谈Redo Log和Undo Log

目录 概述 Redo Log Undo Log 总结 概述 在MYSQL中&#xff0c;日志是非常重要的&#xff0c;其中Redo log 和undo log都是引擎层&#xff08;innodb&#xff09;实现的日志&#xff0c;redo log 是重做日志&#xff0c;提供 前滚 操作&#xff0c;undo log 是回退日志&am…

Flask应用基础入门总结

【1】使用migrate方式进行数据库连接 使用migrate方式进行数据库连接需要在终端分别运行三行代码&#xff1a; #init&#xff08;运行一次即可&#xff09;&#xff08;此db为自己设置的连接数据库的对象,可以修改&#xff09; flask db init #&#xff08;将orm模型生成迁移…

一些AG10K FPGA 调试的建议-Douglas

PLL AGM FPGA 在配置成功时&#xff0c;PLL 已经完成锁定&#xff0c;lock 信号已经变高&#xff1b;如果原设计中用 lock 信号输出实现系统 reset 的复位功能&#xff0c;就不能正确完成上电复位&#xff1b;同时&#xff0c;为了保证 PLL 相移的稳定&#xff0c;我们需要在 P…

107.管道(有名、无名管道)

目录 管道 无名管道 无名管道的创建 无名管道的基本用法 有名管道 写管道的进程&#xff1a; 读管道的进程&#xff1a; 管道 管道是一种进程间通信的机制&#xff0c;允许一个进程的输出直接作为另一个进程的输入。在Linux 系统中&#xff0c;管道通过 pipe 系统调用来…

如何在Facebook Business Manager进行企业认证

Facebook Business Manager&#xff0c;简称BM&#xff0c;按照字面意思理解就是Facebook官方的商务管理平台&#xff0c;是供广告主团队去使用的一个管理工具。BM可以绑定Facebook公共主页、广告账户等一系列Facebook账号。通过BM&#xff0c;企业就可以在一个后台&#xff0c…