transformer模型结构|李宏毅机器学习21年
来源:https://www.bilibili.com/video/BV1Bb4y1L7FT?p=4&vd_source=f66cebc7ed6819c67fca9b4fa3785d39
概述
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的输入加一些错误的东西。
self-attention与masked-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)=?i∑?P(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 1e?9。
评估指标的优化
训练时是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分数的计算包括以下几个步骤:
-
n-gram精确度:对于每个n-gram(n可以是1, 2, 3, …),计算机器翻译中n-gram出现的次数,并与参考翻译中的n-gram出现次数进行比较。对于每个n-gram,计算其精确度(precision)。
-
修剪(Clipping):如果机器翻译中的n-gram出现次数超过参考翻译中的最大出现次数,将其修剪至该最大值。
-
加权平均:对于不同的n-gram精确度,计算它们的几何平均值,并对结果取自然对数。
-
句子长度惩罚(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=BP?exp(n=1∑N?wn?logpn?)
其中:
- 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-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-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)
-
长度惩罚(BP):
- MT的长度为7,Ref的长度为6。
- 因为MT的长度大于Ref的长度,所以没有长度惩罚, BP = 1 \text{BP} = 1 BP=1。
-
加权平均:
- 假设我们给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.5?logp1?+0.5?logp2?)。
现在我们可以计算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=BP?exp(0.5?log76?+0.5?log63?)
计算具体数值:
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=1?exp(0.5?log76?+0.5?log21?)
BLEU
≈
exp
?
(
?
0.42365
)
≈
0.65468
\text{BLEU} \approx \exp\left(-0.42365\right) \approx 0.65468
BLEU≈exp(?0.42365)≈0.65468
因此,BLEU分数大约为0.65468。这个分数反映了机器翻译与参考翻译在1-gram和2-gram层面上的部分匹配程度。在实际应用中,BLEU分数通常会乘以100,因此这个分数可能会表示为65.468。
Non-autoregressive(NAT)
常用于语音合成领域,因为可以:输出长度 * 2 -> 语速 * 2
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!