变形金刚Transformer详解

写了上一篇,就必有这一篇~

1. TRM在做啥?

我们输入一个I love you,输出我爱你,输入一段声音,输出得到你真美。输入长度跟输出长度没有决定性的关系,由机器决定输出的是什么。

2. TRM原理

2.1 TRM模型结构

2.2 Encoder

encoder是由6层独立的layers构成。每层由两个子层,就是上图左边的两个。第一个是一个多头 self-attention结构。第二个是一个简单的基于点的全连接前向网络。

输入b经过self-attention后得到a,借鉴了残差网络的思想使输入跟self-attention的输出相加得到结果在输入至 layar Normalization,得到的输出才是全连接网络层的输入,在经过一个残差连接来连接输出和输入。并且对输出的结构层上做了LayerNorm,得到的输出才是一个block的输出。这个block会重复n次。

2.2.1 Layer Norm

Norm的意思就是在后面跟了一个归一化层。

为什么要使用层归一化:
一是解决梯度消失的问题,二是解决权重矩阵的退化问题,可以更好的解决梯度爆炸,梯度消失在深层网络中的问题,因为逐层进行了归一化,可以使得梯度传导的更稳定。残差路径上传来的向量和Self-Attention计算得到的向量相加后进行Layer-Normalization,即层标准化。Layer Norm对同一个样本同一层的所有神经元进行标准化,使它们满足标准正态分布。LayerNorm的主要思想是:是在每一个样本(一个样本里的不同通道)上计算均值和方差,而不是 BN 那种在批方向计算均值和方差。

2.2.2 BatchNorm

主要思想:在每一层的每一批数据(一个batch里的同一通道)上进行归一化 。Batch Norm则是对Batch内不同样本的同一个神经元所有值进行标准化。

2.2.3 LN和BN的区别

理解下来就是,比如说两个sequence,你是天边最美的云彩和让我把你留下来哈哈,LN是在自己的句子里计算均值和方差,而BN是你和让做均值和方差,所以BN不可,LN更好。

2.2.4 小总结

输入inputs,得到input embedding,然后碰到位置嵌入,相加作为整体的输入,遇到一个多头注意力机制,计算之后,与输入一起经过残差得到一个结果,在经过一个LN得到输出结果,再碰到了一个两层的全连接层,在经过残差,输出结果。


2.3 Decoder

Decoder也是由6层的独立层组成,用了三个子层。用于对encoder的输出做multi-head self attention。具体结构都一样,也是在子层上应用了残差连接,再在子层输出加上一个LayerNorm。但是论文在decoder中的multi-head self attention 做了一个mask修改。目的是为了防止序列之后的位置被用于预测前面的位置信息,造成对模型的信息泄漏。

2.3.1 Autoregressive

Decoder的input从begin开始,得到输出,再由这个输出进行输入得到下一个输入,即每一个输出都是下一次的输入,所以当decoder在产生一个句子的时候,有可能是错误的,因为他看到的是自己的输出。为了停止需要一个END。

2.3.2 masked Self-attention:

之前我们经过Self-attention输出的每一个b是都考虑了整个句子的咨询,但masked Self-attention的b1只能考虑a1的咨询,产生b2考虑了a1,a2的咨询,产生b3的时候考虑了a1,a2,a3的咨询,产生b4可以考虑整个句子的咨询。

2.3.3 Non-autoregressive

一次性输出句子,即输入一整排的begin,输出一整排句子

2.4 Encoder与Decoder之间如何传播

实际运作过程:decoder凭借产生一个q,去encoder抽取咨询做接下来decoder中全连接层的input,然后接下来在产生第二个输入机。

scheduled Sampling:测试的时候给decoder输入一些错误的东西,训练的时候decoder才会输出正确的,才会训练的更好。

2.5 输出

首先经过一次线性变换,然后Softmax得到输出的概率分布,然后通过词典,输出概率最大的对应的单词作为我们的预测输出。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Transformer 是一种用于自然语言处理任务的深度学习模型,它是由 Google 在 2017 年提出的。相比于传统的循环神经网络和卷积神经网络,Transformer 采用了全新的 Encoder-Decoder 架构,使用了自注意力机制(Self-Attention Mechanism)来处理输入序列,从而在机器翻译、文本摘要、对话生成等任务上取得了很好的效果。 Transformer 本质上是一个 Encoder-Decoder 架构,其中 Encoder 和 Decoder 都是由多个相同的层堆叠而成。每个层都包含了两个子层,分别是 Multi-Head Attention 和 Feed Forward Neural Network。其中 Multi-Head Attention 是 Transformer 的核心,它使用了自注意力机制来计算输入序列中每个词与其他词之间的关系,从而更好地捕捉上下文信息。 Transformer 的训练过程分为两个阶段:第一阶段是无监督的预训练,使用大量的无标注数据来训练模型;第二阶段是有监督的微调,使用有标注的数据来微调模型,使其适应特定的任务。 下面是一个简单的 Transformer 模型的实现代码: ```python import torch import torch.nn as nn import torch.nn.functional as F class Transformer(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim, num_layers, num_heads, dropout): super().__init__() self.embedding = nn.Embedding(input_dim, hidden_dim) self.encoder_layers = nn.ModuleList([EncoderLayer(hidden_dim, num_heads, dropout) for _ in range(num_layers)]) self.decoder_layers = nn.ModuleList([DecoderLayer(hidden_dim, num_heads, dropout) for _ in range(num_layers)]) self.fc_out = nn.Linear(hidden_dim, output_dim) self.dropout = nn.Dropout(dropout) self.scale = torch.sqrt(torch.FloatTensor([hidden_dim])).to(device) def forward(self, src, trg, src_mask, trg_mask): src_len, batch_size = src.shape trg_len, batch_size = trg.shape src_pos = torch.arange(0, src_len).unsqueeze(1).repeat(1, batch_size).to(device) trg_pos = torch.arange(0, trg_len).unsqueeze(1).repeat(1, batch_size).to(device) src = self.dropout((self.embedding(src) * self.scale) + src_pos) trg = self.dropout((self.embedding(trg) * self.scale) + trg_pos) for layer in self.encoder_layers: src = layer(src, src_mask) for layer in self.decoder_layers: trg = layer(trg, src, trg_mask, src_mask) output = self.fc_out(trg) return output ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值