当前位置:   article > 正文

代码实现transformer_transformer 损失函数

transformer 损失函数

代码实现transformer

1.下面这整个属于一个样本。所以batch_size = 1
在这里插入图片描述
2.
在这里插入图片描述
3.
在这里插入图片描述
4.
为了加快模型的处理速度,我们在训练的时候,一般都会把batch_size设置为大于1的数,但又会引入一个问题,当我们同时处理几个句子时(这里我们把矩阵的一行看做一个句子,而且有多少行,batch_size就设置为几。)有些句子的长度是不一样的,所以我们这里人为设定了一个最大长度。当句子的长度超过最大长度时,我们就需要把超过长度的字删去。此时有些句子的长度是小于最大长度的,而一个矩阵需要把它的所有位置都有值时才能计算,所以我们需要把没有值的地方进行填充。此时我们人为设定了一个值为p。

在这里插入图片描述
5.
在这里插入图片描述
6.
在这里插入图片描述
7.
在这里插入图片描述
8.
在这里插入图片描述
9.

pe = torch.zeros(max_len, d_model)
在这里插入图片描述
10.
position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)

在这里插入图片描述

position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)

在这里插入图片描述
12.

position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)
div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-math.log(10000.0) / d_model))
pe[:, 0::2] = torch.sin(position * div_term)## 这里需要注意的是pe[:, 0::2]这个用法,就是从0开始到最后面,补长为2,其实代表的就是偶数位置
pe[:, 1::2] = torch.cos(position * div_term)##这里需要注意的是pe[:, 1::2]这个用法,就是从1开始到最后面,补长为2,其实代表的就是奇数位置
        ## 上面代码获取之后得到的pe:[max_len*d_model]
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

在这里插入图片描述
14.
在这里插入图片描述

在这里插入图片描述
16.
每一字都是512维度,一共是12个字
在这里插入图片描述
17.
pos指的是单词的位置,提问:这儿的位置是指在原句子中的位置吗?
在这里插入图片描述
18.
下面的整个作为transformer的输入
在这里插入图片描述
19.
下面的QKV属于三个矩阵
在这里插入图片描述
20.
在这里插入图片描述
21.

所谓的embedding意思就是单词的向量表示
在这里插入图片描述
22.
这里的score和李宏毅的有点不同
这儿的dk是多少呢?(dk=64)
这个是得到score之后,再进行除以根号下dk,最后再进行softmax
在这里插入图片描述
23.
每一个单词用矩阵的一行来表示
在这里插入图片描述
24.
从这里可以看出,多头注意力机制的Wq,Wk,Wv是不一样的,这样设计应该是可以得到不同尺度的特征。
在这里插入图片描述
25.

在这里插入图片描述
26.

两个全连接,每个全连接有两层。
在这里插入图片描述
27.
S表示输入的开始
E表示结束

在这里插入图片描述
28.

编码端的输入是需要训练的输入
解码端的输入是标签的输入,因为要训练,需要把最终的预测结果相比较,比较之后再计算损失函数,最后通过损失函数更新权重

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
30.

在这里插入图片描述
31.

P代表填充字符

在这里插入图片描述
32.
代码中的batch_size表示的是几组句子,下面表示4组句子。

在这里插入图片描述
33.
代码中的max_len表示一个句子的最大长度,当句子的最大长度超过max_len就把超过的部分截掉,如果没有max_len这么长,就需要使用特殊字符P来填充。
在代码中把p设置成了负无穷,这样可以让p不去影响其他字符
在这里插入图片描述
34.
全连接层映射的维度
在这里插入图片描述
35.
下面这个矩阵是输入的词表矩阵,行时代码有多少个词,列表示,一个词用多少维度去表示。
在这里插入图片描述
36.

在这里插入图片描述
上图中的1二维列表就是下面这个二维列表

在这里插入图片描述

下面的图片中二维列表就是2中所表示的形状
在这里插入图片描述

词向量和位置参数相加
38.
get_attn_pad_mask函数将会得到如下图所示的符号矩阵。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
40.
这儿圈出来的部分就是把输入的单词转换成词向量的矩阵形式,并且复制了三份,分别和Wk,Wq,Wv相乘,获得去,q,k,v
那既然这儿的三个输入矩阵都是相同的,为什么不输入一个矩阵,而是输入相同的三个矩阵呢?(因为在解码端还有一个交互注意力层,它的q矩阵来自解码端,k,v矩阵来自编码端,来源并不相同。所以我们进行三个输入,并且三个输入是相同的。)

在这里插入图片描述
在这里插入图片描述

这里被分成了8个头,每个头的维度是d_k维度
在这里插入图片描述
都是分头
在这里插入图片描述

这个都是写的d_k,不是写错了,是因为q,k的维度要相同,后面才能够相乘,不然后面无法相乘。
在这里插入图片描述
43.
下面的代码是在实现下面这个公式。
在这里插入图片描述

在这里插入图片描述
44.
把attn_mask里面的pad值置为无穷小,这样经过softmax的时候就不会对其他单词产生影响。

在这里插入图片描述
45.

每一个横行做softmax
在这里插入图片描述
然后再乘以对应的V矩阵
在这里插入图片描述
46.
在这里插入图片描述
47.

解码层堆叠n个
在这里插入图片描述
48.
告诉解码端那些是pad符号
在这里插入图片描述
49.
找到那些是位置是被pad的

在这里插入图片描述
50.

在这里插入图片描述

下面图:输入S的时候,它只能看见S,它看不见卷起来。输入卷的时候,它能看见S卷,它看不见起来。
在这里插入图片描述
51.

在这里插入图片描述

在这里插入图片描述
53.

Transformer 学习笔记2.0(https://www.bilibili.com/video/BV1vf4y1n7k2/?spm_id_from=333.788.recommend_more_video.22)

1.0
下面就是encoder to decoder 的总体框架图
在这里插入图片描述
2.0
在这里插入图片描述
3.0
在这里插入图片描述
4.0

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/342644
推荐阅读
相关标签
  

闽ICP备14008679号