Tranformers
文章平均质量分 76
Q渡劫
不会写还不滚去看官方文档
展开
-
transformers架构实现
query, key, value = [l(x).view(batch_size, -1, self.head, self.d_k).transpose(1, 2) for l, x in zip(self.linears, (query, key, value))] # 将1、2维度进行调换,目的是让句子长度维度和词向量维度靠近,这样注意力机制才能找到词义与句子之间的关系。:param size: 生成向后遮掩的掩码张量,参数 size 是掩码张量的最后两个维度大小,它的最后两个维度形成一个方阵。原创 2023-10-14 17:28:17 · 161 阅读 · 0 评论 -
解码器层和解码器
解码器层是解码器的组成单元,每个解码器层根据给定的输入向目标方向进行特征提取操作,即解码过程根据解码器的结果以及上一次预测的结果,对下一次可能出现的值进行特征表示。原创 2023-10-13 12:32:27 · 260 阅读 · 0 评论 -
learn编码器
编码器用于对输入进行指定的特征提取的过程,也称为编码,由 N 个编码器层堆叠而成。原创 2023-10-12 11:29:15 · 67 阅读 · 0 评论 -
learn编码器层
作为编码器的组成单元,每个编码器层完成一次对输入的特征提取过程,即编码过程原创 2023-10-11 22:34:09 · 88 阅读 · 0 评论 -
子层连接结构
输入到每个子层以及规范化层的过程中,还使用了残差连接(跳跃连接),因此我们把这一部分整体结构叫子层连接(代表子层及其连接结构),在每个编码器层,都有两个子层,这两个子层加上周围的链接结构就形成了两个子层连接结构。原创 2023-10-11 17:33:17 · 117 阅读 · 0 评论 -
learn规范化层
它是所有深层网络模型都需要的标准网络层,因为随着网络层数的增加,通过多层的计算后参数可能出现过大或者过小的情况,这样可能会导致学习过程中出现异常,模型可能收敛非常慢,因此都会在一定层数后接入规范化层进行数值的规范化,使其特征数值在合理范围内。原创 2023-10-11 15:59:18 · 94 阅读 · 0 评论 -
基于位置的前馈神经网络
在Transformers中前馈全连接层就是具有两层线性层的全连接网络原创 2023-10-10 21:22:20 · 505 阅读 · 0 评论 -
多头注意力机制
从多头注意力的结构图中,貌似这个所谓的多个头就是指多组线性变换,但是并不是,只使用了一组线性变换层,即三个变换张量对 Q、K、V 分别进行线性变换,这些变化不会改变原有张量的尺寸,因此每个变换矩阵都是方阵,得到输出结果后,多头的作用才开始显现,每一个头开始从词义层面分割输出的张量,也就是每一个头都先获得一组 Q、K、V进行注意力机制的计算,但是句子中的每个词的表示只获得一部分,也就是只分割了最后一维的词嵌入向量,这就是所谓的多头,将每个头获取的输入送到注意力机制中就形成了多头注意力机制。原创 2023-10-08 22:11:19 · 10266 阅读 · 1 评论 -
注意力机制
它需要三个指定的输入Q(query)、k(key)、V(value),然后通过公式得到注意力的计算结果,这个结果代表 query 在 key 和 value 作用下的表示。通常这个计算表达式是多样的Q、K、V的比喻解释假如有一个问题:给出一段文本,使用一些关键词对它进行描述为了方便统一正确的答案,这道题可能预先已经给大家写出一些关键字作为提示。其中这些给定的提示词就可以看作为 key,而整个文本信息就相当于是 query。而 value 可以比作你看到这段文本信息之后自己得到的答案信息。原创 2023-10-05 19:02:32 · 556 阅读 · 0 评论 -
learn掩码张量
attn_shape = (1,3,3) # 定义掩码张量的形状sub_mask = np.triu(np.ones(attn_shape), k = 0).astype('uint8') # 定义一个上三角矩阵,元素为1,再使用其中的数据类型变为无符号8位整形,其中 k=1 是将上三角矩阵的所有为 1 的元素向上移动一行[[[1 1 1][0 1 1][0 0 1]]]原创 2023-10-04 00:33:05 · 244 阅读 · 0 评论 -
位置编码器
""":param d_model: 词嵌入的维度:param dropout: 随机失活,置0比率:param max_len: 每个句子的最大长度,也就是每个句子中单词的最大个数"""pe = torch.zeros(max_len,d_model) # 初始化一个位置编码器矩阵,它是一个0矩阵,矩阵的大小是max_len * d_modelposition = torch.arange(0,max_len).unsqueeze(1) # 初始一个绝对位置矩阵。原创 2023-10-01 12:16:43 · 1232 阅读 · 0 评论 -
文本嵌入层
文本嵌入层原创 2023-09-30 17:18:25 · 170 阅读 · 0 评论 -
transformers简介
处理序列任务的时候,首要的选择就是RNN。但是RNN主要思想就是把前一时刻的输出作为这一时刻的输入,因此导致RNN在训练过程中后一个时刻的输入依赖于前一个时刻的输出,无法进行并行处理,导致模型训练的速度慢,比CNN模型要慢几倍到十几倍。后来又提出使用CNN来替代RNN,速度上确实取得了一定的优势,但在面对更长的序列的时候,CNN的卷积核限制了视野的大小,导致无法看到更全局的信息。最后直到self-Attention层的出现,才解决了这样的问题,也就是后来的transformer。原创 2023-09-30 15:30:06 · 386 阅读 · 0 评论