当前位置: 首页 > news >正文

芜湖网站网站建设天津seo选天津旗舰科技a

芜湖网站网站建设,天津seo选天津旗舰科技a,菏泽住房与城乡建设官网,做网站被骗没有居住证能不能告他目录 1.Transformer宏观结构 2.Transformer结构细节 2.1输入 2.2编码部分 2.3解码部分 2.4多头注意力机制 2.5线性层和softmax 2.6 损失函数 3.参考代码 #x1f368; 本文为[#x1f517;365天深度学习训练营]内部限免文章#xff08;版权归 *K同学啊* 所有#…目录 1.Transformer宏观结构 2.Transformer结构细节 2.1输入 2.2编码部分 2.3解码部分 2.4多头注意力机制 2.5线性层和softmax 2.6 损失函数 3.参考代码 本文为[365天深度学习训练营]内部限免文章版权归 *K同学啊* 所有 作者[K同学啊] Transformer整体结构图与seq2seq模型类似Transformer模型结构中的左半部分为编码器encoder右半部分为解码器decoder接下来拆解Transformer。 1.Transformer宏观结构 Transformer模型类似于seq2seq结构包含编码部分和解码部分。不同之处在于它能够并行计算整个序列输入无需按时间步进行逐步处理。 其宏观结构如下 其中每层encoder由两部分组成 Self-Attention LayerFeed Forward Neural Network前馈神经网络FFNN decoder在encoder的Self-Attention和FFNN中间多加了一个Encoder-Decoder Attention层。该层的作用是帮助解码器集中注意力于输入序列中最相关的部分。 2.Transformer结构细节 2.1输入 Transformer的数据输入与seq2seq不同。除了词向量Transformer还需要输入位置向量用于确定每个单词的位置特征和句子中不同单词之间的距离特征。 2.2编码部分 编码部分的输入文本序列经过处理后得到向量序列送入第一层编码器。每层编码器输出一个向量序列作为下一层编码器的输入。第一层编码器的输入是融合位置向量的词向量后续每层编码器的输入则是前一层编码器的输出。 2.3解码部分 最后一个编码器输出一组序列向量作为解码器的K、V输入。 解码阶段的每个时间步输出一个翻译后的单词。当前时间步的解码器输出作为下一个时间步解码器的输入Q与编码器的输出K、V共同组成下一步的输入。重复此过程直到输出一个结束符。 解码器中的 Self-Attention 层和编码器中的 Self-Attention 层的区别 在解码器里Self-Attention 层只允许关注到输出序列中早于当前位置之前的单词。具体做法是在 Self-Attention 分数经过 Softmax 层之前屏蔽当前位置之后的那些位置将Attention Score设置成-inf。解码器 Attention层是使用前一层的输出来构造Query 矩阵而Key矩阵和Value矩阵来自于编码器最终的输出。 2.4多头注意力机制 Transformer论文引入了多头注意力机制多个注意力头组成以进一步完善Self-Attention。 它扩展了模型关注不同位置的能力多头注意力机制赋予Attention层多个“子表示空间”。 残差链接Normalize 编码器和解码器的每个子层Self-Attention 层和 FFNN都有一个残差连接和层标准化layer-normalization细节如下图 2.5线性层和softmax Decoder最终输出一个浮点数向量。通过线性层和Softmax将该向量转换为一个包含模型输出词汇表中每个单词分数的logits向量假设有10000个英语单词。Softmax将这些分数转换为概率使其总和为1。然后选择具有最高概率的数字对应的词作为该时间步的输出单词。 2.6 损失函数 在Transformer训练过程中解码器的输出和标签一起输入损失函数以计算损失loss。最终模型通过方向传播backpropagation来优化损失。 3.参考代码 class SelfAttention(nn.Module):def __init__(self, embed_size, heads):super(SelfAttention, self).__init__()self.embed_size embed_sizeself.heads headsself.head_dim embed_size // headsassert (self.head_dim * heads embed_size), Embed size needs to be div by headsself.values nn.Linear(self.head_dim, self.head_dim, biasFalse)self.keys nn.Linear(self.head_dim, self.head_dim, biasFalse)self.queries nn.Linear(self.head_dim, self.head_dim, biasFalse)self.fc_out nn.Linear(heads * self.head_dim, embed_size)def forward(self, values, keys, query, mask):N query.shape[0]value_len , key_len , query_len values.shape[1], keys.shape[1], query.shape[1]# split embedding into self.heads piecesvalues values.reshape(N, value_len, self.heads, self.head_dim)keys keys.reshape(N, key_len, self.heads, self.head_dim)queries query.reshape(N, query_len, self.heads, self.head_dim)values self.values(values)keys self.keys(keys)queries self.queries(queries)energy torch.einsum(nqhd,nkhd-nhqk, queries, keys)# queries shape: (N, query_len, heads, heads_dim)# keys shape : (N, key_len, heads, heads_dim)# energy shape: (N, heads, query_len, key_len)if mask is not None:energy energy.masked_fill(mask 0, float(-1e20))attention torch.softmax(energy/ (self.embed_size ** (1/2)), dim3)out torch.einsum(nhql, nlhd-nqhd, [attention, values]).reshape(N, query_len, self.heads*self.head_dim)# attention shape: (N, heads, query_len, key_len)# values shape: (N, value_len, heads, heads_dim)# (N, query_len, heads, head_dim)out self.fc_out(out)return outclass TransformerBlock(nn.Module):def __init__(self, embed_size, heads, dropout, forward_expansion):super(TransformerBlock, self).__init__()self.attention SelfAttention(embed_size, heads)self.norm1 nn.LayerNorm(embed_size)self.norm2 nn.LayerNorm(embed_size)self.feed_forward nn.Sequential(nn.Linear(embed_size, forward_expansion*embed_size),nn.ReLU(),nn.Linear(forward_expansion*embed_size, embed_size))self.dropout nn.Dropout(dropout)def forward(self, value, key, query, mask):attention self.attention(value, key, query, mask)x self.dropout(self.norm1(attention query))forward self.feed_forward(x)out self.dropout(self.norm2(forward x))return outclass Encoder(nn.Module):def __init__(self,src_vocab_size,embed_size,num_layers,heads,device,forward_expansion,dropout,max_length,):super(Encoder, self).__init__()self.embed_size embed_sizeself.device deviceself.word_embedding nn.Embedding(src_vocab_size, embed_size)self.position_embedding nn.Embedding(max_length, embed_size)self.layers nn.ModuleList([TransformerBlock(embed_size,heads,dropoutdropout,forward_expansionforward_expansion,)for _ in range(num_layers)])self.dropout nn.Dropout(dropout)def forward(self, x, mask):N, seq_length x.shapepositions torch.arange(0, seq_length).expand(N, seq_length).to(self.device)out self.dropout(self.word_embedding(x) self.position_embedding(positions))for layer in self.layers:out layer(out, out, out, mask)return outclass DecoderBlock(nn.Module):def __init__(self, embed_size, heads, forward_expansion, dropout, device):super(DecoderBlock, self).__init__()self.attention SelfAttention(embed_size, heads)self.norm nn.LayerNorm(embed_size)self.transformer_block TransformerBlock(embed_size, heads, dropout, forward_expansion)self.dropout nn.Dropout(dropout)def forward(self, x, value, key, src_mask, trg_mask):attention self.attention(x, x, x, trg_mask)query self.dropout(self.norm(attention x))out self.transformer_block(value, key, query, src_mask)return outclass Decoder(nn.Module):def __init__(self,trg_vocab_size,embed_size,num_layers,heads,forward_expansion,dropout,device,max_length,):super(Decoder, self).__init__()self.device deviceself.word_embedding nn.Embedding(trg_vocab_size, embed_size)self.position_embedding nn.Embedding(max_length, embed_size)self.layers nn.ModuleList([DecoderBlock(embed_size, heads, forward_expansion, dropout, device)for _ in range(num_layers)])self.fc_out nn.Linear(embed_size, trg_vocab_size)self.dropout nn.Dropout(dropout)def forward(self, x ,enc_out , src_mask, trg_mask):N, seq_length x.shapepositions torch.arange(0, seq_length).expand(N, seq_length).to(self.device)x self.dropout((self.word_embedding(x) self.position_embedding(positions)))for layer in self.layers:x layer(x, enc_out, enc_out, src_mask, trg_mask)out self.fc_out(x)return outclass Transformer(nn.Module):def __init__(self,src_vocab_size,trg_vocab_size,src_pad_idx,trg_pad_idx,embed_size 256,num_layers 6,forward_expansion 4,heads 8,dropout 0,devicecuda,max_length100):super(Transformer, self).__init__()self.encoder Encoder(src_vocab_size,embed_size,num_layers,heads,device,forward_expansion,dropout,max_length)self.decoder Decoder(trg_vocab_size,embed_size,num_layers,heads,forward_expansion,dropout,device,max_length)self.src_pad_idx src_pad_idxself.trg_pad_idx trg_pad_idxself.device devicedef make_src_mask(self, src):src_mask (src ! self.src_pad_idx).unsqueeze(1).unsqueeze(2)# (N, 1, 1, src_len)return src_mask.to(self.device)def make_trg_mask(self, trg):N, trg_len trg.shapetrg_mask torch.tril(torch.ones((trg_len, trg_len))).expand(N, 1, trg_len, trg_len)return trg_mask.to(self.device)def forward(self, src, trg):src_mask self.make_src_mask(src)trg_mask self.make_trg_mask(trg)enc_src self.encoder(src, src_mask)out self.decoder(trg, enc_src, src_mask, trg_mask)return out
http://www.hkea.cn/news/14430269/

相关文章:

  • 珠宝出售网站模板厦门网站建设哪家比较好
  • 山东住房建设厅官网站房产公司网站模板
  • 网站关键字排名减压轻松网站开发
  • 网站开发z亿玛酷1流量订制表白网页在线生成制作免费
  • 网站开发 0755html做调查问卷网站
  • 竞品网站分析如何做网站管理
  • 国内无代码和低代码平台.net 网站优化
  • 17zwd一起做网站教学视频个人网站有备案吗
  • 金融公司网站建设模板虚拟机做的网站怎么让外网访问不了
  • p2p网站建设源码毕业设计网站设计说明书
  • 怎么看别人网站怎么做的个人网站主页模板
  • 做网站卖赚钱吗腾讯企业邮箱登录入口下载
  • 做商城网站那个好wordpress图片缝隙
  • 如何做网站内容管理有做网站动态效果软件
  • 申请域名之后如何做网站小企业网站建设制作平台
  • 英铭网站建设襄阳seo费用
  • 站酷logo设计商城网站建设策划方案
  • l临沂互助系统网站开发奎文营销型网站建设
  • 济南网站优化厂家支付行业的网站怎么做
  • 海南高端网站建设网站建设主机耗电量
  • 外贸网站建设的败笔怎样做个做外贸的网站
  • 设计网站公司搜索y湖南岚鸿知名南京网站建设知识
  • 请多记几个本站域名防止失联南宁网约车租赁公司
  • 厦门建设工程信息造价网站邢台网站改版开发
  • 网站推广服务好公司排名网站词库怎么做
  • 如何为企业做网站成都网站建设冠辰哪家强
  • 广州网站建设建设网站设计方案和技巧
  • 河南生产型企业网站建设肇东网页设计
  • 百石网怎么做网站做网站学好哪些软件
  • 韩国食品网站设计欣赏wordpress动静分离