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

深圳网站建设科技有限公司马克 扎克伯格大学做的网站

深圳网站建设科技有限公司,马克 扎克伯格大学做的网站,启用中文域名大网站,河南招标信息网1、self-attention 1.1、self-attention结构图 上图是 Self-Attention 的结构#xff0c;在计算的时候需要用到矩阵 Q(查询), K(键值), V(值)。在实际中#xff0c;Self-Attention 接收的是输入(单词的表示向量 x组成的矩阵 X) 或者上一个 Encoder block 的输出。而 Q, K, V…1、self-attention 1.1、self-attention结构图 上图是 Self-Attention 的结构在计算的时候需要用到矩阵 Q(查询), K(键值), V(值)。在实际中Self-Attention 接收的是输入(单词的表示向量 x组成的矩阵 X) 或者上一个 Encoder block 的输出。而 Q, K, V 正是通过 Self-Attention 的输入进行线性变换得到的。 1.2 QKV的计算 Self-Attention 的输入用矩阵 X进行表示则可以使用线性变阵矩阵 WQ, WK, WV 计算得到 Q, K, V。计算如下图所示注意 X, Q, K, V 的每一行都表示一个单词 3.3 Self-Attention 的输出 得到矩阵 Q, K, V之后就可以计算出 Self-Attention 的输出了计算的公式如下  公式中计算矩阵 Q和 K 每一行向量的内积为了防止内积过大因此除以 dk 的平方根。Q 乘以 K 的转置后得到的矩阵行列数都为 nn 为句子单词数这个矩阵可以表示单词之间的 attention 强度。下图为 Q 乘以 K 的转置1234 表示的是句子中的单词。 得到  之后使用 Softmax 计算每一个单词对于其他单词的 attention 系数公式中的 Softmax 是对矩阵的每一行进行 Softmax即每一行的和都变为 1。 对矩阵每一行进行softmax ​​​​​ 得到 Softmax 矩阵之后可以和 V相乘得到最终的输出 Z。 self-attention输出 上图中 Softmax 矩阵的第 1 行表示单词 1 与其他所有单词的 attention 系数最终单词 1 的输出 Z1 等于所有单词 i 的值 Vi 根据 attention 系数的比例加在一起得到如下图所示 Zi的计算方法 class Attention(nn.Module):def __init__(self, input_n:int,hidden_n:int):super().__init__()self.hidden_n hidden_nself.input_ninput_nself.W_q torch.nn.Linear(input_n, hidden_n)self.W_k torch.nn.Linear(input_n, hidden_n)self.W_v torch.nn.Linear(input_n, hidden_n)def forward(self, Q, K, V, maskNone):Q self.W_q(Q)K self.W_k(K)V self.W_v(V)attention_scores torch.matmul(Q, K.transpose(-2, -1))attention_weights softmax(attention_scores)output torch.matmul(attention_weights, V)return output 2、multi-head attention 从上图可以看到 Multi-Head Attention 包含多个 Self-Attention 层首先将输入 X分别传递到 h 个不同的 Self-Attention 中计算得到 h 个输出矩阵 Z。下图是 h8 时候的情况此时会得到 8 个输出矩阵 Z。 多个self-attention 得到 8 个输出矩阵 Z1 到 Z8 之后Multi-Head Attention 将它们拼接在一起 (Concat)然后传入一个 Linear层得到 Multi-Head Attention 最终的输出 Z。 Multi-Head Attention的输出 可以看到 Multi-Head Attention 输出的矩阵 Z与其输入的矩阵 X 的维度是一样的。 class MultiHeadAttention(nn.Module):def __init__(self,hidden_n:int, h:int 2):hidden_n: hidden dimensionh: number of headssuper().__init__()embed_sizehidden_nheadshself.embed_size embed_sizeself.heads heads# 每个head的处理的特征个数self.head_dim embed_size // heads# 如果不能整除就报错assert (self.head_dim * self.heads self.embed_size), embed_size should be divided by heads# 三个全连接分别计算qkvself.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(self.head_dim * self.heads, embed_size)def forward(self, Q, K, V, maskNone):query,values,keysQ,K,VN query.shape[0] # batch# 获取每个句子有多少个单词value_len, key_len, query_len values.shape[1], keys.shape[1], query.shape[1]# 维度调整 [b,seq_len,embed_size] [b,seq_len,heads,head_dim]values 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)# 对原始输入数据计算q、k、vvalues self.values(values)keys self.keys(keys)queries self.queries(queries)# 爱因斯坦简记法用于张量矩阵运算q和k的转置矩阵相乘# queries.shape [N, query_len, self.heads, self.head_dim]# keys.shape [N, keys_len, self.heads, self.head_dim]# energy.shape [N, heads, query_len, keys_len]energy torch.einsum(nqhd, nkhd - nhqk, [queries, keys])# 是否使用mask遮挡t时刻以后的所有q、kif mask is not None:# 将mask中所有为0的位置的元素在energy中对应位置都置为 1*10^10energy energy.masked_fill(mask0, torch.tensor(-1e10))# 根据公式计算attention, 在最后一个维度上计算softmaxattention torch.softmax(energy/(self.embed_size**(1/2)), dim3)# 爱因斯坦简记法矩阵元素其中query_len keys_len value_len# attention.shape [N, heads, query_len, keys_len]# values.shape [N, value_len, heads, head_dim]# out.shape [N, query_len, heads, head_dim]out torch.einsum(nhql, nlhd - nqhd, [attention, values])# 维度调整 [N, query_len, heads, head_dim] [N, query_len, heads*head_dim]out out.reshape(N, query_len, self.heads*self.head_dim)# 全连接shape不变output self.fc_out(out)return output 3、transformer block 3.1 encoder blockg构架图 上图红色部分是 Transformer 的 Encoder block 结构可以看到是由 Multi-Head Attention, Add Norm, Feed Forward, Add Norm 组成的。刚刚已经了解了 Multi-Head Attention 的计算过程现在了解一下 Add Norm 和 Feed Forward 部分。 3.2 Add Norm Add Norm 层由 Add 和 Norm 两部分组成其计算公式如下 其中 X表示 Multi-Head Attention 或者 Feed Forward 的输入MultiHeadAttention(X) 和 FeedForward(X) 表示输出 (输出与输入 X 维度是一样的所以可以相加)。 Add指 XMultiHeadAttention(X)是一种残差连接通常用于解决多层网络训练的问题可以让网络只关注当前差异的部分在 ResNet 中经常用到。 残差连接 Norm指 Layer Normalization通常用于 RNN 结构Layer Normalization 会将每一层神经元的输入都转成均值方差都一样的这样可以加快收敛。 3.3 Feed Forward Feed Forward 层比较简单是一个两层的全连接层第一层的激活函数为 Relu第二层不使用激活函数对应的公式如下。 Feed Forward X是输入Feed Forward 最终得到的输出矩阵的维度与 X 一致。 class TransformerBlock(nn.Module):def __init__(self, hidden_n:int, h:int 2):hidden_n: hidden dimensionh: number of headssuper().__init__()embed_sizehidden_nheadsh# 实例化自注意力模块self.attention MultiHeadAttention (embed_size, heads)# muti_head之后的layernormself.norm1 nn.LayerNorm(embed_size)# FFN之后的layernormself.norm2 nn.LayerNorm(embed_size)forward_expansion1dropout0.2# 构建FFN前馈型神经网络self.feed_forward nn.Sequential(# 第一个全连接层上升特征个数nn.Linear(embed_size, embed_size * forward_expansion),# relu激活nn.ReLU(),# 第二个全连接下降特征个数nn.Linear(embed_size * forward_expansion, embed_size))# dropout层随机杀死神经元self.dropout nn.Dropout(dropout)def forward(self, value, key, query, maskNone):attention self.attention(value, key, query, mask)# 输入和输出做残差连接x query attention# layernorm标准化x self.norm1(x)# dropoutx self.dropout(x)# FFNffn self.feed_forward(x)# 残差连接输入和输出forward ffn x# layernorm dropoutout self.dropout(self.norm2(forward))return out transformer import torch.nn as nn class Transformer(nn.Module):def __init__(self,vocab_size, emb_n: int, hidden_n: int, n:int 3, h:int 2):emb_n: number of token embeddingshidden_n: hidden dimensionn: number of layersh: number of heads per layerembedding_dimemb_nsuper().__init__()self.embedding_dim embedding_dimself.embeddings nn.Embedding(vocab_size,embedding_dim)self.layersnn.ModuleList([TransformerBlock(hidden_n,h) for _ in range(n) ])def forward(self,x):N,seq_lenx.shapeoutself.embeddings(x)for layer in self.layers:outlayer(out,out,out)return out
http://www.lebaoying.cn/news/4631.html

相关文章:

  • 番禺做网站企业大连网站建设流程图
  • 河南网站排名优化价格seo手机优化软件哪个好用
  • 共青城网站建设公司网页设计制作价格
  • 云南网站建设定做群晖里的wordpress如何删除
  • 长洲网站建设wordpress如何发送邮件
  • 建设银行信用卡境外网站盗刷网站开发和桌面开发哪个难
  • 住房和城乡建设部注册中心网站个人介绍网页制作
  • 网站建设费怎么写分录在家做的打字兼职的网站
  • 比较好的网站开发公司eclipse 制作网站开发
  • 加盟平台网站怎么做网站做app的软件
  • 网站里可以添加视频做背景吗搭建wordpress后干什么
  • 餐厅网站模版wordpress文章到微信二维码
  • 公司做网站最低需用多少钱怎么做网络推广和宣传
  • 如何规划一个网站企业型商务网站制作
  • 网站公司开发dede网站建设步骤
  • wordpress图片延迟加载网站标题和描述优化
  • 网站资料如何做脚注显而易见的解决方案 企业解决方案
  • 常州行业网站制作网站换服务器要怎么做
  • 家做网站wordpress中文链接
  • 哪个网站可以做验证码兼职公众号制作135
  • 网站的架设怎么做网站添加二维码
  • 邳州网站wordpress文章自动排版
  • seo站长之家保康县城乡建设路网站
  • 德州建设街小学网站做瑜伽网站
  • 淘宝网官方网站免费下载娄底建设局网站
  • 郑州锐途网站建设c#网站开发工具
  • centos 网站搭建招聘网站的建设
  • frontpage网站模板下载锦州网站建设公司
  • php网站目录系统北京南站地图
  • 石家庄网站建设技术支持wordpress中文企业模板下载