小白总结Transformer模型要点(二)(下)

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,5000CU*H 3个月
模型训练 PAI-DLC,5000CU*H 3个月
简介: 本文主要总结了Transformer模型的要点,包含模型架构各部分组成和原理、常见问题汇总、模型具体实现和相关拓展学习。

(2)交互注意力层,只对编码端输出的Padding部分进行Mask:

Encoder的输入是K,将K中的Pad符号传给模型后面,同时忽略Decoder的Q中的Pad。

Encoder和Decoder之间的交互:

2345_image_file_copy_190.jpg

一个Encoder的输出与每一个Decoder进行交互:

2345_image_file_copy_191.jpg

2345_image_file_copy_192.jpg

更细致的过程如下:

2345_image_file_copy_193.jpg

二、疑问汇总

1.常见的attention计算方法

2345_image_file_copy_194.jpg

2.为什么正弦曲线可以支持处理大于语料库中最长序列长度的序列?

2345_image_file_copy_195.jpg3.序列转导模型是什么?

2345_image_file_copy_196.jpg

序列转导就是任何将输入序列转换为输出序列的任务,也就是常说的seq2seq,先行应用包括语音识别、文本转语音、机器翻译、蛋白质二级结构预测。

4.3个评价指标的理解?

2345_image_file_copy_197.jpg

5.

2345_image_file_copy_198.jpg

三、模型实现

1.实现思路

  • 由整体到局部
  • 理解数据的流动形状
    上一个部分的输出是下一个部分的输入,数据的大小、形状和维度。

2.实现过程

2.Generator:

代码如下:

class Generator(nn.Module):
    '''
    定义标准线性+softmax生成步骤
    '''
    def __init__(self, d_model, vocab):
        super().__init__()
        self.proj = nn.Linear(d_model, vocab)
    def forward(self, x):
        return F.log_softmax(self.proj(x), dim=-1)

log_softmax(self.proj(x), dim=-1)中,dim为-1与列表类似,表示最后一个维度,例如tensor的维度为torch.Size([2, 3, 4, 5])时,经过dim为-1时,输出的结果变为torch.Size([2, 3, 4])维度。

3.LayerNorm

代码如下:

class LayerNorm(nn.Module):
    '''构建一个LayerForm模块'''
    def __init__(self, features, eps=1e-6):
        super().__init__()
        self.a_2 = nn.Parameter(torch.ones(features))
        self.b_2 = nn.Parameter(torch.zeros(features))
        self.eps = eps
    def forward(self, x):
        mean = x.mean(-1, keepdim=True)
        std = x.std(-1, keepdim=True)
        return self.a_2 * (x - mean) / (std + self.eps) + self.b_2

x.mean(-1, keepdim=True)中,keepdim=True表示要计算的维度保留,只不过这个维度的长度变为1,这里就是最后一个维度保留且为1,如果为keepdim=False(默认值),则表示去掉该维度。

n.train

在训练时会报错,如下:

  File "E:\Anaconda3\envs\pytorchbase\Lib\site-packages\torch\nn\modules\module.py", line 1102, in _call_impl
    return forward_call(*input, **kwargs)
  File "E:\Anaconda3\envs\pytorchbase\Lib\site-packages\torch\nn\modules\sparse.py", line 158, in forward
    return F.embedding(
  File "E:\Anaconda3\envs\pytorchbase\Lib\site-packages\torch\nn\functional.py", line 2044, in embedding
    return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse)
IndexError: index out of range in self

这是因为num_embeddings(词典的词个数)不够大,进行词嵌入的时候字典从1, …, n,映射所有的词(或者字)num_embeddings =n是够用的,但是会考虑pad,pad默认一般是0,所以我们会重新处理一下映射字典0, 1, 2, …, n一共n+1个值,此时num_embeddings=n+1才够映射。

四、延伸学习

1.残差连接

2.KL散度

KL散度,即相对熵或信息散度,是两个概率分布间差异的非对称性度量 。在信息论中,相对熵等价于两个概率分布的信息熵的差值,若其中一个概率分布为真实分布,另一个为理论(拟合)分布,则此时相对熵等于交叉熵与真实分布的信息熵之差,表示使用理论分布拟合真实分布时产生的信息损耗。

总结

Transformer模型是Seq2Seq类模型中一个跨时代的模型,是NLP经典之作,使用自注意力的机制代替了以前的LSTM,从而实现了效果和效率上的提升,并为后来的Bert等众多预训练模型奠定了基础,同时后来也逐渐在CV等众多领域大展拳脚,地位十分重要。

相关文章
|
6月前
|
机器学习/深度学习 并行计算 算法
Transformer 一起动手编码学原理
学习Transformer,快来跟着作者动手写一个。
94340 9
|
6月前
|
机器学习/深度学习 存储 算法
【轻量化:实操】动手实现神经网络中的裁枝操作(附演示代码&yolo系列)
【轻量化:实操】动手实现神经网络中的裁枝操作(附演示代码&yolo系列)
183 1
|
算法 Java 测试技术
我的算法基础实验代码-下篇
算法题目,Java语言版
74 0
|
机器学习/深度学习 自然语言处理 计算机视觉
图解BERT:通俗的解释BERT是如何工作的
图解BERT:通俗的解释BERT是如何工作的
490 0
图解BERT:通俗的解释BERT是如何工作的
|
机器学习/深度学习 自然语言处理
小白总结Transformer模型要点(二)(上)
本文主要总结了Transformer模型的要点,包含模型架构各部分组成和原理、常见问题汇总、模型具体实现和相关拓展学习。
小白总结Transformer模型要点(二)(上)
|
机器学习/深度学习 自然语言处理
小白总结Transformer模型要点(一)(下)
本文主要总结了Transformer模型的要点,包含模型架构各部分组成和原理、常见问题汇总、模型具体实现和相关拓展学习。
小白总结Transformer模型要点(一)(下)
|
机器学习/深度学习 自然语言处理 并行计算
小白总结Transformer模型要点(一)(上)
本文主要总结了Transformer模型的要点,包含模型架构各部分组成和原理、常见问题汇总、模型具体实现和相关拓展学习。
小白总结Transformer模型要点(一)(上)
|
机器学习/深度学习 数据挖掘
无监督学习-自编码器-补充|深度学习(李宏毅)(二十)
无监督学习-自编码器-补充|深度学习(李宏毅)(二十)
324 0
无监督学习-自编码器-补充|深度学习(李宏毅)(二十)
|
机器学习/深度学习 人工智能 并行计算
深度学习模型训练推理——基础环境搭建推荐博文查阅顺序【❤️基础安装—认真帮大家整理了❤️】
博主这里梳理了自己过去两年,认真撰写的一些基础知识方面的干货博文,希望能够有效帮助到更多刚刚投身于ML、DL 领域不久的小伙伴们
375 0
深度学习模型训练推理——基础环境搭建推荐博文查阅顺序【❤️基础安装—认真帮大家整理了❤️】
|
算法 数据挖掘 C++
DL之GCN:GCN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
DL之GCN:GCN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
DL之GCN:GCN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略